我可以使用单例模式解决这个问题。但是问题是我无法控制其他应用程序,它将调用新的MyClass()。
我有什么方法可以在MyClass的隐式构造函数中做到吗?。这样的事情。
class ClassName {
public ClassName() {
if( object exist for ClassName)
return that
else
create New ClassName object
}
}
提前致谢。
答案 0 :(得分:1)
您可以使用枚举:
public enum ClassName {
INSTANCE;
}
现在,您有一个实例,您不必担心其他实例化您的课程。
我可以在MyClass的隐式构造函数中做任何方法吗?。
不,这不能在构造函数中完成。
答案 1 :(得分:0)
如果要控制构造,请输入显式构造函数并将其声明为private。您可以从类中的静态工厂方法中调用它。
答案 2 :(得分:0)
这可能是你想要的:
public class MySingletonClass {
private static MySingletonClass instance = null;
private MySingletonClass() { }
public static MySingletonClass getInstance() {
if (instance == null) {
instance = new MySingletonClass();
}
return instance;
}
// add your methods here.
}
这样任何人都无法拨打new MySingletonClass();
。要获得必须编写的对象的唯一实例:
MySingletonClass msc = MySingletonClass.getInstance();
或以某种方式使用void
方法:
MySingletonClass.getInstance().yourMethod();
对于带有返回类型的方法,或类似这样:
VariableType foo = MySingletonClass.getInstance().yourMethod(); // Must return VariableType
答案 3 :(得分:0)
在班级中创建一个静态变量,并在那里保留object instance
。通过getter
方法公开您的类对象,如下所示:
class ClassName {
private static ClassName myClass= null;
public ClassName getClassName() {
if(myClass == null){
ClassName.myClass = new ClassName();
}
return ClassName.myClass;
}
}
答案 4 :(得分:0)
你需要这样的东西:
class ClassName {
private static ClassName INSTANCE;
private ClassName() {
//create ClassName object
}
public static ClassName getInstance(){
if (INSTANCE == null){
INSTANCE = new ClassName();
}
return INSTANCE;
}
}
这只是单例模式的基本实现。
如果构造对象的类使用new
来构造它,那么你就有点搞砸了。实际上没有办法只使用公共构造函数在Java中实现单例模式。
修改:您可以执行以下操作:
class ClassNameWrapper extends ClassName {
private final ClassName className;
public ClassNameWrapper(){
className = ClassName.getInstance();
}
//overload methods from ClassName
}
这样,对new ClassNameWrapper()
的每次调用都将使用相同的ClassName实例。