Править: Отвеченный - ошибка была методом, не было статично
Я используюсь Шаблон разработки Singleton
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
// Private constructor prevents instantiation from other classes
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
Мой вопрос состоит в том, как я создаю объект Singleton класса в другом классе?
Я попробовал:
Singleton singleton = new Singleton();
// error - constructor is private
Singleton singleton = Singleton.getInstance();
// error - non-static method cannot be referenced from a static context
Каков правильный код?
Спасибо, Spencer
Singleton singleton = Singleton.getInstance();
- правильный путь. Убедитесь, что ваш метод getInstance ()
действительно статический
.
Поскольку ваша реализация Singleton
далеко не безопасна - ваш объект может быть создан с помощью отражения, вы можете создать синглтон на основе enum
Singleton singleton = Singleton.getInstance ();
должен работать - эта ошибка не имеет смысла, учитывая ваш код; вы уверены, что сообщаете об этом правильно? (Это имело бы смысл, если бы вы забыли сделать метод getInstance
статическим, что вы сделали в приведенном выше коде.)
Код, который вы дали нам для класса, верен.
Наконец, одно концептуальное замечание: во-первых, вы не «создаете объект класса Singleton» - в этом весь смысл Singleton. :) Вы просто получаете ссылку на существующий объект.
Этот:
Singleton singleton = Singleton.getInstance();
должен работать. Именно так вызываются статические методы в Java. А метод getInstance()
объявлен как статический
. Вы уверены, что используете тот самый класс Singleton
? Или, возможно, вы импортировали класс с таким же названием из другого пакета.
вы должны использовать public static Singleton getInstance()
, но реализация не очень корректна.
if (instance == null) {
instance = new Singleton();
}
return instance;
Вот как вы должны это делать. Это гарантирует создание экземпляра, если он не существует, или просто возвращает существующий экземпляр. Ваш код будет делать то же самое, но это улучшит читабельность.
Нет ничего плохого в использовании
Singleton singleton = Singleton.getInstance();
// error - non-static method cannot be referenced from a static context
Это способ чтобы получить одноэлементный объект из класса. Мне нужно еще кое-что. Пожалуйста, опубликуйте более подробную информацию