2017-08-09 71 views
0

我想用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(); 
} 
+1

也许使用单身?这可能是[XY问题](http://xyproblem.info/)。 – shmosel

+0

嗨问题我不能测试类不为空或不是因为它总是有效的。它不为空或为空 –

+1

我不知道这意味着什么。 – shmosel

回答

3

根据你的逻辑尝试下面的代码。

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()); 
    } 
} 
+0

谢谢你,我正在研究你所有的建议,这是非常有用的。 –

1

为什么不把getDisplay成的一个成员方法类?

通过这种方式,您可以在getDisplay所在的类中保存clazz名称和实例的列表或地图。检查列表/地图中的成员资格并返回display()(如果存在)。如果它不存在,将它放在列表/地图上,然后返回display()。

+0

对不起,我不明白,如果可能的话请给我举例代码。 –