【发布时间】:2014-04-03 10:33:22
【问题描述】:
我有一个如下所示的类定义。我希望它是一个单身人士。
public class MyClass {
public static MyClass sInstance;
public static final int STATUS_CONSTANT = 0;
public int myProperty = 0;
public static MyClass get() {
if (sInstance==null) {
sInstance= new MyClass();
}
return sInstance;
}
}
使用它时,JetBrains IdeaJ 警告我比较总是返回 false...
MyClass myClass = MyClass.get();
if (myClass.myProperty == MyClass.STATUS_CONSTANT) {
...
}
...然而,如果我这样做,它并没有说明什么:
if (MyClass.get().myProperty == MyClass.STATUS_CONSTANT)
我不明白为什么它对第一种方法生气!?无论哪种方式,它都应该引用相同的静态字段 (sInstance)。
【问题讨论】:
-
您使用的是什么版本的 intellij?我无法在 v13.x 中重现这个
-
我看不到任何错误。这两个条件都对我来说是真实的。
-
你确定这是初始化“public int myProperty = 0;”的正确方法吗? ??并且还有一个私有构造函数,否则我想知道它怎么会是一个单例。实现 clone 方法并返回 null 以确保生成的对象不可克隆
-
哪个 Java 版本使用您的 IDE?
-
@SanyamGoel 只要他不尝试使用 new 而不是 MyClass.get 来获取 MyClass 的实例,它将作为单例工作,但确实将构造函数设为私有使其成为不可能。跨度>
标签: java intellij-idea static-members