なぜリフレクションは、以下のコードでプライベートコンストラクタを破ることによってシングルトンパターンを破ることができないのですか? InstanctTwoに新しいインスタンスがあるはずですが、存在しません。Javaのリフレクションとシングルトン
Constructor[] constructors = EagerInitializedSingleton.class.getDeclaredConstructors();
for (Constructor constructor : constructors) {
//Below code will destroy the singleton pattern
constructor.setAccessible(true);
instanceTwo = (EagerInitializedSingleton) constructor.newInstance();
break;
}
ことができることを確認して(私はそれが他のケースで動作するかどうかについてはコメントをしません)。なぜそれはできないと思いますか? –
'EagerInitializedSingleton'が' enum'の場合は可能ですか? (それはそうではありませんが、コードは実際にはありません)。私は、洗練されたシリアライゼーションやリフレクション攻撃があっても、複数のインスタンス化に対する厳しい保証について、ジョシュ・ブロッホが言っていることを聞いています。 –
instanceTwoのハッシュを出力する際にnullポインタ例外が発生します。 EagerInitializedSingletonは、名前が示すようにsingleTonです。これはenumではありません。 –