Лучший способ вызвать метод внутри одноэлементного класса
У меня есть синглтон класс
public class Singleton {
static Singleton instance;
public static Singleton getInstance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
Рассмотрим метод с публичной функцией (), определенный внутри класса Singleton.
Какой лучший способ вызвать метод внутри одноэлементного класса:
Singleton. method () - метод вызывается статически
или же
Singleton.getInstance.method() - метод не статичный?
7 ответов
В случае одноэлементных классов статические методы не используются, так как доступен только один экземпляр класса, и каждый собеседник имеет одну и ту же копию этого класса.
поэтому всегда создайте метод экземпляра и вызовите:
Singleton.getInstance().method();
Во-первых, вы должны убедиться, что вы объявили Constructor
как частный, чтобы никто не мог его вызвать и заново инициализировать. Следующим образом:
private void Singleton(){
//Initialize your private data
}
Во-вторых, позвоните static
Методы прямо как следующие:
Singleton.yourMethod();
В-третьих, нестатический метод, вызывающий следующее:
Singleton.getInstance().yourMethod();
Вот хороший пример Singleton
классы
Если вы хотите использовать шаблон Singleton:
public class Singleton {
private static Singleton sInstance;
public static Singleton getInstance() {
if (sInstance == null) {
sInstance = new Singleton();
}
return sInstance;
}
// Prevent duplicate objects
private Singleton() {
}
public void method() {
}
}
Шаблон синглтона позволяет вам контролировать количество экземпляров, которые существуют в одном классе, то есть только 1. Но сам класс по-прежнему является нормальным классом, который не должен знать, сколько таких существует, и поэтому у него должны быть нормальные методы экземпляров.,
Когда используешь static
методы, вы столкнетесь с ужасными проблемами, если захотите изменить количество экземпляров этого класса.
Либо используйте синглтон, либо используйте статические методы.
В первом случае:
Singleton.method();
метод должен быть статичным
Во втором случае:
Singleton.getInstance().method();
метод не является статичным.
Так что это концептуально разные
Здесь у вас есть getInstance()
как статический метод, и вы создали method
как нестатический метод или метод экземпляра.
Так что для статического метода, Class.method_name
Можно использовать формат, но для объекта метода должен быть создан объект.
Это может быть неправильный синтаксис, как показано там:
Singleton.getInstance().method();
Singleton obj = new Singleton();
obj.method();
должен быть правильный формат
Singleton.getInstance() () метод.
лучше, так как при первом вызове экземпляр будет нулевым, а экземпляр создается только в getInstance().