我正在学习Singleton,我遇到了以下代码块
public class School {
private static School school;
private ArrayList<String> teachers;
private School(){
teachers = new ArrayList<>();
teachers.add("adam");
teachers.add("john");
teachers.add("jackson");
teachers.add("jason");
}
public static School getInstance(){
if (school==null)
school=new School();
return school;
}
public String getTeacher(){
if (!(teachers.size() ==0))
return teachers.remove(0);
return "no teachers left";
}
}
正如您所看到的,getInstance()方法是静态的。我在徘徊为什么?
提前感谢您的帮助:)
我知道返回类型不是字面上的静态。这里的返回类型是学校。在Singleton中,必须有一个实例使用它自己的类的静态变量,我得到那个部分并且完全有意义。但我的问题是,为什么设置静态变量的方法也必须是静态的呢?就是那个问题。
答案 0 :(得分:1)
因为这是Singleton的要点,是整个程序的单个实例。
如果它不是静态的,你必须使用Singleton类的实例来调用getInstance()方法,这没有任何意义。
答案 1 :(得分:1)
常见的设计模式(Singletons)是类的实例字段的用法。该字段必须是静态的(以便可以在没有预先存在的类实例的情况下检索它),因此,访问它的任何方法也必须是静态的。
答案 2 :(得分:1)
返回类型不是静态的。该方法是静态的。请参阅JLS:https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.4.3.2