看完老师的反射这一章节,第一感觉想到是单例,即利用反射来生成新的单实例,下面是实现的代码:
一个普通的 UserManager 单例[code=java]package com.itcast.heima;
public class UserManager {
private static UserManager instance = new UserManager();
private UserManager() {
}
public static UserManager getInstance() {
return instance;
}
}[/code]通过反射生成不同的单实例:[code=java]package com.itcast.heima;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.Date;
public class Test1 {
/**
* @param args
*/
public static void main(String[] args)throws Exception {
Constructor constuctor = UserManager.class.getDeclaredConstructor();
constuctor.setAccessible(true);
UserManager userManager1 = (UserManager)constuctor.newInstance();
UserManager userManager2 = UserManager.getInstance();
UserManager userManager3 = UserManager.getInstance();
System.out.println(userManager2 == userManager3); //它们是同一个实例
System.out.println(userManager1 == userManager2); //它们是不同实例
}
}[/code]问题:有什么方法能保证单例是真正唯一的单实例而不让其它程序通过反射途径获取到新的单例呢 |