【发布时间】:2012-06-27 15:30:20
【问题描述】:
我有一个静态方法类,Utils,它基本上用于实用方法,几乎每个类都使用它。它做一些事情,比如获取文件和其他基本的东西。我的测试人员将这个类更改为单例,这样每个使用 Utils 的类现在都必须调用 getInstance()。原因是除非是这种情况,否则他无法测试某些东西。在我看来,这在某些方面是错误的,这可能会导致问题。
public class Utils {
/**
* Singleton method to allow for easier testing.
* @return an instance of
*/
public synchronized static Utils getInstance() {
if (instance == null) {
instance = new Utils();
}
return instance;
}
public synchronized static void setInstance(Utils instance) {
Utils.instance = instance;
}
/** Singleton to make testing easier **/
private static Utils instance = null;
public static boolean checkOSTen() {
return getInstance()._checkOSTen();
}
private boolean _checkOSTen() {
boolean autoPair = false;
if (android.os.Build.VERSION.SDK_INT >= 10){
autoPair = true;
}
return autoPair;
}
}
顺便说一下,我有一个非常复杂的内部消息传递系统,它使用至少 7 个线程来发送消息,并且想看看静态方法调用与 Singleton 静态方法调用是否存在影响。
除此之外还有其他方法可以进行测试吗?似乎一些Java反射会得到你需要的东西。
【问题讨论】:
-
我不知道您的主要问题的答案,但如果您在应用程序中使用少量线程,则实现
singleton的更好方法是double checking method。 -
你能用这个双重检查方法示例添加答案吗?
-
@JPM 那篇文章来自 2002 年。显然 JDK5 已经解决了这个问题,如果你使用
volatile关键字:cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
标签: java android static junit singleton