将某物设置为 INSTANCE 而不是创建新对象是什么意思?
What does it mean to set something to an INSTANCE rather than create a new object?
我在互联网上的某个地方阅读了一些代码,我看到了这个有趣的部分,它引起了我的兴趣,我很好奇它是如何工作的。
有一个名为 ResourceManager 的 class,如下所示:
public class ResourceManager {
private static final ResourceManager INSTANCE = new ResourceManager();
public static ResourceManager getInstance() {
return INSTANCE;
}
}
(里面还有很多其他的东西,但我认为没有必要包括在内)。但是,我觉得有趣的是作者没有包含构造函数。事实上,在他的主要方法中,他只引用了这个 class 而不是创建一个新对象,他只是写了:
ResourceManager.getInstance().etc();
我以前从未见过这样的编码。我必须修改它,因为我需要一个 ResourceManager 对象才能使用,所以我所做的是:
ResourceManager res = ResourceManager.getInstance();
效果非常好。但是,我仍然不完全理解这里发生了什么。这个 class 是如何在没有构造函数的情况下创建的?
在 Java 中,假设您不提供构造函数,class 有一个默认构造函数。否则它看起来像 Singleton Pattern,来自维基百科 link,一种将 class 的实例化限制为一个对象的设计模式。 同样,要使它成为 正确的 Singleton
你应该添加一个 private
构造函数
private ResourceManager() {
super();
}
否则有人可以实例化它。
这是 singleton pattern,这意味着永远只有一个 class ResourceManager
的实例(构造函数实际上应该是 private
来强制执行此操作) .
However, I still don't entirely understand what is going on here. How is this class being created without a constructor?
如果你不显式写构造函数,Java会自动插入一个default constructor(假设superclass也有默认构造函数)。
回答没有构造函数的问题:
所有 java class 没有定义构造函数的元素,都有一个 隐式 public 无参数构造函数。
但是,应该定义一个私有的无参数构造函数,因为这个class显然是一个单例。但是没有私有构造函数,可以随时创建新实例。
我在互联网上的某个地方阅读了一些代码,我看到了这个有趣的部分,它引起了我的兴趣,我很好奇它是如何工作的。
有一个名为 ResourceManager 的 class,如下所示:
public class ResourceManager {
private static final ResourceManager INSTANCE = new ResourceManager();
public static ResourceManager getInstance() {
return INSTANCE;
}
}
(里面还有很多其他的东西,但我认为没有必要包括在内)。但是,我觉得有趣的是作者没有包含构造函数。事实上,在他的主要方法中,他只引用了这个 class 而不是创建一个新对象,他只是写了:
ResourceManager.getInstance().etc();
我以前从未见过这样的编码。我必须修改它,因为我需要一个 ResourceManager 对象才能使用,所以我所做的是:
ResourceManager res = ResourceManager.getInstance();
效果非常好。但是,我仍然不完全理解这里发生了什么。这个 class 是如何在没有构造函数的情况下创建的?
在 Java 中,假设您不提供构造函数,class 有一个默认构造函数。否则它看起来像 Singleton Pattern,来自维基百科 link,一种将 class 的实例化限制为一个对象的设计模式。 同样,要使它成为 正确的 Singleton
你应该添加一个 private
构造函数
private ResourceManager() {
super();
}
否则有人可以实例化它。
这是 singleton pattern,这意味着永远只有一个 class ResourceManager
的实例(构造函数实际上应该是 private
来强制执行此操作) .
However, I still don't entirely understand what is going on here. How is this class being created without a constructor?
如果你不显式写构造函数,Java会自动插入一个default constructor(假设superclass也有默认构造函数)。
回答没有构造函数的问题:
所有 java class 没有定义构造函数的元素,都有一个 隐式 public 无参数构造函数。
但是,应该定义一个私有的无参数构造函数,因为这个class显然是一个单例。但是没有私有构造函数,可以随时创建新实例。