1

java がシングルトン クラス オブジェクトのインスタンス化を止めないのはなぜですか?

Void クラスのオブジェクトを作成しようとしていました

java.lang.Void

2つのインスタンスを作成するためにこのコードを書きました

try{
    Class clazz = Void.class;
    Constructor cons = clazz.getDeclaredConstructor();
    cons.setAccessible(true);
    Void s2 = (Void) cons.newInstance(); 
    System.out.println(s2);
    Void s3 = (Void) cons.newInstance(); 
    System.out.println(s3);

}catch (Exception e) {
    e.printStackTrace();
} 

誰でも説明できますか-なぜこれがJavaで許可されているのですか?

4

2 に答える 2

5

このようなリフレクションを使用すると、通常の保護メカニズムを回避し、通常はアクセスできないプライベート コンストラクターやメソッドを呼び出すことができます。Java では、setAccessible呼び出しなしでプライベート コンストラクターを介してクラスをインスタンス化することはできません。これは、基本的に、「これを行うべきではないことはわかっていますが...」を意味します。

信頼されていないコードを実行する必要がある場合は、SecurityManagerメカニズムを使用して、この種の「規則違反」を禁止できます。

于 2012-10-30T08:17:06.153 に答える
2

Java は、クラスがシングルトンとして使用されることを意図していたことを知る方法がないためです。そのようなクラスが必要な場合は、列挙型を使用してください。

于 2012-10-30T08:55:22.120 に答える