我想用Reflection来读取每个子类扩展类Demo的显示功能。
class Demo{
public abstract void display();
}
我想clazz只初始化一次,我不知道怎么检查clazz是否存在,请帮帮我:D
public static void getDisplay(Class<? extends Demo> clazz) throws
InstantiationException, IllegalAccessException {
return clazz.newInstance().display();
}
答案 0 :(得分:3)
根据您的逻辑尝试以下代码。
Class对象上的getSuperclass()方法返回类的超类。如果此Class表示Object类,接口,基本类型或void,则返回null。
// First took class name by using Class.forName(String fullyClassifiedClassName).
Class<?> superClass = Class.forName("childclass").getSuperclass();
System.out.println(superClass); // prints "childclass"
System.out.println(Object.class.getSuperclass()); // prints "null"
或尝试此代码,它在我的系统上正常工作。我希望这会有所帮助。
public class Main {
public static void main(String[] args) {
clazz c = new clazz();
c.display();
}
}
class Demo
{
// Apply superclass's logic here
}
// sub class
class clazz extends Demo {
public void display()
{
Demo val1 = new Demo();
clazz val2 = new clazz();
Class cls;
cls = val1.getClass();
System.out.println("Super class name = " + cls.getName());
/* returns the superclass of the class(superClass) represented
by this object */
cls = cls.getSuperclass();
System.out.println("Super is inherited by another class " + cls.getName());
cls = val2.getClass();
System.out.println("child Class Name " + cls.getName());
/* returns the superclass of the class(subClass) represented
by this object */
cls = cls.getSuperclass();
System.out.println("Child class extended by " + cls.getName());
}
}
答案 1 :(得分:1)
为什么不将getDisplay转换为类的成员方法?
这样你就可以在getDisplay所在的类中保存一个clazz名称和实例的列表或映射。检查列表/映射中的成员身份并返回display()(如果存在)。如果它不存在,请将其放在列表/地图上,然后返回display()。