2012-06-15 60 views
0

假設,我加載由ClassLoader的類別在運行時:的java:如何通過類加載器獲取單個實例

Class<MyInterface> clazz = (Class<MyInterface>)getClass().getClassLoader().loadClass("ImplementerOfMyInterface"); 

新的實例,我可以通過

MyInterface myInt = clazz.newInstance(); 

創建然後但當我需要通過實現MyInterface的名稱來獲取單例實例,而不是創建新實例,應該做些什麼?

+0

場有名字,但是實例沒有名字。你能舉一個你的意思嗎? –

回答

3

而不是調用newInstance,你可以調用一個靜態的「getInstance」方法(或任何你使用的singleton getter方法名稱)。

例如:

public class ReflectTest { 

    public static void main(String[] args) throws Exception { 
     Class clazz = Class.forName("ReflectTest"); 
     Method m = clazz.getDeclaredMethod("getInstance", null); 
     Object o = m.invoke(null, null); 
     System.out.println(o == INSTANCE); 
    } 

    public static ReflectTest getInstance() { 
     return INSTANCE; 
    } 

    private static final ReflectTest INSTANCE = new ReflectTest(); 

    private ReflectTest() { 
    } 

} 
相關問題