ฉันจะทราบได้อย่างไรว่าคลาส Java เป็นนามธรรมจากการสะท้อนกลับ


184

ฉันกำลังเรียนผ่านชั้นเรียนในไฟล์ Jar และต้องการค้นหาสิ่งที่ไม่เป็นนามธรรม ฉันสามารถแก้ปัญหานี้ได้โดยการสร้างคลาสและดักจับ InstantiationException แต่อินสแตนซ์นั้นมีประสิทธิภาพในการทำงานเนื่องจากบางคลาสมีการเริ่มต้นอย่างหนัก ฉันไม่พบสิ่งที่ชัดเจนเหมือน isAbstract () ในเอกสาร Class.java

คำตอบ:


321

มันจะมีรูปแบบนามธรรมเป็นหนึ่งในตัวดัดแปลงของมันเมื่อคุณเรียกใช้ getModifiers () บนคลาสอ็อบเจ็กต์

ลิงค์นี้น่าจะช่วยได้

 Modifier.isAbstract( someClass.getModifiers() );

นอกจากนี้:

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
ขอบคุณ! หมายเหตุเล็กน้อยหนึ่ง: คุณไม่สามารถใช้ "class" เป็นชื่อตัวแปรได้บางทีคุณอาจต้องการเปลี่ยนตัวอย่างของคุณ
Tim Büthe

@seth ฉันคิดว่ามันควรจะเป็นModifier.isAbstract( someClass.class.getModifiers() );บางทีคุณอาจต้องการที่จะเปลี่ยน
steven7mwesigwa

ตามแบบแผนการตั้งชื่อ Java แบบปกติมันเป็นได้ทั้งที่ไหนsomeClass.getModifiers()หรือSomeClass.class.getModifiers()ที่ไหนClass<SomeClass> someClass = SomeClass.class;
neXus

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

1
นอกจากนี้สิ่งที่เซห์พูด :)
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;
}

ถ้าเป็นส่วนต่อประสานและชื่อคลาสคือ java.util.List คุณอาจจะสร้าง ArrayList
Abdushkur Ablimit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.