2012-06-15 41 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() { 
    } 

} 
相关问题