2017-08-09 21 views
0

リフレクションを使用して、各子クラスの表示機能を読み込み、クラスデモを表示します。リフレクションクラスのみ一度だけ初期化

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

こんにちは問題常にnullでないかどうかをテストすることができません。それは常に有効です。それはnullまたは空ではありません –

+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

AのメンバーメソッドにgetDisplayをオンにしないのはなぜクラス?

こうすることで、getDisplayが存在するクラスのクラス名やインスタンスのリストやマップを保存することができます。リスト/マップのメンバシップをチェックし、display()があればそれを返します。存在しない場合は、リスト/マップに配置してdisplay()を返します。

+0

申し訳ありませんが私は理解できません、可能であれば私に例のコードを教えてください。 –

関連する問題