Java sınıfının soyut olup olmadığını yansıtarak nasıl belirleyebilirim?


184

Bir Jar dosyasındaki sınıflar arasında bütünleşiyorum ve soyut olmayanları bulmak istiyorum. Ben sınıfları örnekleme ve InstantiationException tuzakla bu çözebilir ama bazı sınıflar ağır başlangıç ​​var gibi bir performans isabet vardır. Class.java belgelerinde isAbstract () gibi bir şey bulamıyorum.

Yanıtlar:


321

Sınıf nesnesinde getModifiers () öğesini çağırdığınızda değiştiricilerinden biri olarak soyut olacaktır.

Bu bağlantı yardımcı olacaktır.

 Modifier.isAbstract( someClass.getModifiers() );

Ayrıca:

http://java.sun.com/javase/6/docs/api/java/lang/reflect/Modifier.html

http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getModifiers ()


1
Teşekkürler! Küçük bir not: Değişken adı olarak "sınıf" kullanamazsınız, örneğin örneğinizi değiştirmek isteyebilirsiniz.
Tim Büthe

@seth Bence Modifier.isAbstract( someClass.class.getModifiers() );belki değiştirmek istersiniz
steven7mwesigwa

Normal Java adlandırma kurallarına göre ya ya someClass.getModifiers()da SomeClass.class.getModifiers()neredeClass<SomeClass> someClass = SomeClass.class;
neXus

31
Class myClass = myJar.load("classname");
bool test = Modifier.isAbstract(myClass.getModifiers());

1
Ayrıca seth dedi. :)
Stobor

1
public static boolean isInstantiable(Class<?> clz) {
    if(clz.isPrimitive() || Modifier.isAbstract( clz.getModifiers()) ||clz.isInterface()  || clz.isArray() || String.class.getName().equals(clz.getName()) || Integer.class.getName().equals(clz.getName())){
        return false;
    }
    return true;
}

eğer bir arayüz ve sınıf adı java.util.List ise ArrayList'i oluşturabileceğiniz gibi
Abdushkur Ablimit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.