A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈磊 黑马帝   /  2011-7-29 14:47  /  2364 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看完老师的反射这一章节,第一感觉想到是单例,即利用反射来生成新的单实例,下面是实现的代码:

一个普通的 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]问题:有什么方法能保证单例是真正唯一的单实例而不让其它程序通过反射途径获取到新的单例呢

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 问得好!

查看全部评分

2 个回复

倒序浏览
黑马网友  发表于 2011-7-29 14:59:10
沙发
加个final………试试
回复 使用道具 举报
黑马网友  发表于 2011-7-29 17:41:16
藤椅
恩~这个一般情况下没有办法吧,真正唯一的单例,除非限制了这个类只产生唯一的对象吧,不知道对不对~:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马