这是一个面试问题。面试官向我介绍了一个班级人员和另一个班级社区。他想知道我们可以做些什么来确保在Class社区中,Class Person的实例可以被调用一次。
我的方法是将布尔标志定义为全局变量,如果标志值为false,则检查类Person的构造函数,然后它将创建实例或返回错误。通过创建Class Person的第一个实例,此标志值更改为true。他似乎对答案不太满意。
我知道这可能不是正确的做法。问题是,有没有办法使用类定义或特定类型的类?
答案 0 :(得分:3)
对于所有的辛格尔顿命题,我并不是真的很感兴趣。
我会回答同样的问题。但真正的问题似乎是“如何让这个人在社区中独一无二”,这与“如何让我们能够一劳永逸地实现人类”不同。
在这种情况下,我会做一些非常不同的事情。
我会在社区内声明一组人并覆盖Person的等于方法。
然后,在社区内,Person将是唯一的,但Person类仍然可以为其他社区实例实例化。
public class Person{
...
public Boolean equals(Object o){
Person p = (Person) o;
//you own equals logic
return isEqual;
}
...
}
public class Community{
...
private Set<Person>;
...
}
答案 1 :(得分:1)
public class Singleton {
// Private constructor. Prevents instantiation from other classes.
private Singleton() { }
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
或者将您的课程设为enum
类型,使其成为真正的单身人士:
public enum Singleton {
INSTANCE;
public void execute (String arg) {
// Perform operation here
}
}