反射技術對單例模式的挑戰之一道變態的面試題
来源:互联网 发布:北大网络教育简单么 编辑:程序博客网 时间:2024/05/22 13:16
朋友參加面試歸來,跟我說遇到的一面試題,說:利用反射技術可否調用單例模式類的私有構造函數得到其實例?
我想了想,記得做單元測試的時候測私有方法曾用反射調過,答曰:可
又問:如何處理?
答:。。。。。。。
比較無語,我真沒這麼考慮過這個問題。
於是,我寫了個單例模式的類做了下測試,代碼(Java版)如下:
public class Singleton {
private static int flag = 0;
private static Singleton instance = new Singleton();
private Singleton(){
System.out.println("Inited...");
flag +=2;
}
public static Singleton getInstance(){
return instance;
}
public String getString(){
return String.valueOf(flag);
}
}
public static void main(String[] args) throws Exception, NoSuchMethodException {
Class<?> singletonClass = Singleton.class;
Constructor<?> method = singletonClass.getDeclaredConstructor();
method.setAccessible(true);
Singleton instance = (Singleton)method.newInstance();
System.out.println(instance.getString());
}
結果為:4
--------------------------------------------------------------------------------------------------------------------
後來我想,哪個工程師敢這麼寫,那就把這工程師拉出來開批鬥會吧。
如果有其他答案,歡迎不吝賜教。
--------------------------------------------------------------------------------------------------------------------
C#版:
public class Singleton
{
private static Singleton instance = new Singleton();
private static int flag = 0;
private Singleton()
{
flag += 2;
}
public static Singleton getInstance()
{
return instance;
}
public string getString()
{
return flag.ToString();
}
}
}
class Program
{
static void Main(string[] args)
{
Singleton singleton = (Singleton)Activator.CreateInstance(typeof(Singleton), true);
Console.WriteLine(singleton.getString());
}
}
結果為:2
- 反射技術對單例模式的挑戰之一道變態的面試題
- 设计模式之对反射的理解
- Qt中使用到的设计模式之反射模式
- 一道反射和泛型的面试题
- 设计模式之用反射机制改进的抽象工厂
- 一道关于反射的面试题(通过反射修改父类私有属性)
- Java反射机制之数组的反射
- 反射的应用之暴力反射
- 一道面试题想到的设计模式(观察者模式)
- 一道BT的面试题之我见
- 一道百度之星赛题引起的思考
- 一道SQL的面试题之联想
- 一道SQL的面试题之联想
- 一道古老的分赃题之我见
- 一道有意思的题目之Integer
- 设计模式之抽象工厂模式与反射的完美结合
- 一道有趣的面试题 - 设计模式的运用
- J2EE之反射的使用
- 系统字典的设计与ASP.net的实现
- Win7下禁止QQ扫描本地硬盘
- 淘宝前员工开发雨滴阅读,欲打造国产Instapaper
- UIView.clipsToBounds 让子 View 只显示落在父 View 的 Frame 部分
- android Content Provider
- 反射技術對單例模式的挑戰之一道變態的面試題
- 教你一步一步使用django
- 为什么不推荐使用stop和suspend这两个方法?
- poj 2441Arrange the Bulls解题报告-状态压缩dp
- 2012中南大学校赛F题 - 旋转卡壳的思维...
- iOS的iCon 启动画面
- Java中的重载和覆盖
- 查看数据库活动连接数
- windows phone (12) 小试自定义样式