我将singleton对象的引用赋值为null。
但它仍在调用Singleton类的方法。
这是我的代码
class Singleton {
private static Singleton singleton = new Singleton();
/*
* A private Constructor prevents any other class from instantiating.
*/
private Singleton() {
}
/* Static 'instance' method */
public static Singleton getInstance() {
return singleton;
}
/* Other methods protected by singleton-ness */
protected static void demoMethod() {
System.out.println("demoMethod for singleton");
}
}
public class SingletonDemo {
public static void main(String[] args) {
Singleton tmp = Singleton.getInstance();
tmp.demoMethod();
tmp = null;
tmp.demoMethod();
}
}
答案 0 :(得分:5)
这是因为library(tidyr)
library(dplyr)
df <- df %>%
gather(type, count, -id)
df <- df[complete.cases(df),][,-3]
df[order(df$id),]
id type
1 1 conditionA
7 2 conditionB
13 3 conditionC
19 4 conditionD
5 5 conditionA
是demoMethod()
(就是这样,它不属于static
实例状态的一部分,但是相当于类定义的一部分)
您所做的不是指变量Singleton
,而是指tmp
通过 Singleton
变量。这应该是由IDE引发的警告(通常是Eclipse和IntelliJ)。
如果您删除了tmp
关键字,那么您将获得预期的static
。
答案 1 :(得分:4)
您正在调用@Min(100)
private Long cost;
,这是一种静态方法 - 所以您的代码在这里:
demoMethod
实际上正在编译为:
tmp.demoMethod();
这显然不取决于Singleton.demoMethod();
的价值。
这与单身方面完全无关:
tmp
请注意,Eclipse在这些方法调用下放置了黄色波浪线 - 我强烈怀疑如果你看一下警告,你会看到它告诉你不调用这样的静态方法。遵循建议,你不会得到奇怪的行为......
答案 2 :(得分:1)
方法demoMethod
是静态的。它不受Singleton
类的任何实例的约束。您应该将其更改为实例方法:
protected void demoMethod() {
System.out.println("demoMethod for singleton");
}