Хорошо, если частный конструктор не принимает никаких аргументов, мы получаем проблему при создании нового экземпляра, в этом случае после setAccessible true мы не можем создать объект.
Даже construct.newInstance(null);
не создаст объект без конструктора аргументов.
можем ли мы создать объект нижеприведенного кода, используя отражение:
public class Singleton {
private static Singleton instance = new Singleton();
/* private constructor */
private Singleton() {}
public static Singleton getDefaultInstance() {
return instance;
}
}
Да, мы можем создать объект вышеупомянутого класса.
// reflection concept to get constructor of a Singleton class.
Constructor<Singleton> constructor = Singleton.class.getDeclaredConstructor();
// change the accessibility of constructor for outside a class object creation.
constructor.setAccessible(true);
// creates object of a class as constructor is accessible now.
Singleton secondOb = constructor.newInstance();
// close the accessibility of a constructor.
constructor.setAccessible(false);
Вы можете обратиться: Пример 2: «Стремительная инициализация» и «Нарушение одиночного кода отражением» моего блога: http://sanjaymadnani.wordpress.com/2014/04/14/singleton-design-pattern-in-java/