Учитывая объект, как проверить, является ли класс Singleton или нет?Как определить, является ли класс одноэлементным классом из объекта?
В настоящее время я использую этот
public class SingletonClass implements IsSingleton
где IsSingleton
является пустым интерфейсом, который я реализую на одноэлементных классах. Таким образом, класс может быть протестирован как singleton
SingletonClass obj = SingletonClass.getInstance();
if(obj instanceof IsSingleton)
System.out.println("Class is Singleton");
else
System.err.println("Class not singleton");
Есть ли лучший способ определить класс Singleton. Я пробовал свой путь через reflection
, но проблема в том, что есть getConstructors()
только возврат объявлен общественных классов. Таким образом, он будет рассматривать класс без объявленного конструктора как Singleton.
Я не эксперт по java, но если это способ программно проверить, является ли конструктор объекта закрытым или нет (через отражение, возможно), вот как я его протестировал. – Kristian
@Kristian - есть способ проверить это, но частный конструктор не гарантирует, что класс является одноэлементным.вы все равно можете построить столько, сколько хотите, через статический метод для указанного объекта. – jtahlborn
Наличие частного конструктора не обязательно означает, что класс реализован как одноэлементный. – birryree