Warum Reflexion Singleton-Muster nicht brechen kann, indem der private Konstruktor durch den folgenden Code unterbrochen wird. Es sollte eine neue Instance auf InstancTwo geben, aber nicht.Java Reflection und Singleton
Constructor[] constructors = EagerInitializedSingleton.class.getDeclaredConstructors();
for (Constructor constructor : constructors) {
//Below code will destroy the singleton pattern
constructor.setAccessible(true);
instanceTwo = (EagerInitializedSingleton) constructor.newInstance();
break;
}
Sicher kann es. Warum denkst du, kann es nicht? –
Kann es sein, wenn'EagerInitializedSingleton' eine 'enum' ist? (Es klingt nicht wie es ist, aber wir haben nicht wirklich den Code). Ich frage nach dem, was Josh Bloch über die "eiserne Garantie gegen mehrfache Instanziierung, selbst angesichts ausgeklügelter Serialisierungs- oder Reflektionsangriffe" sagt. –
Ich erhalte eine Nullzeiger-Ausnahme beim Drucken von Hash für instanceTwo. EagerInitializedSingleton ist ein singleTon, wie der Name vermuten lässt. Dies ist nicht enum. –