-1

私は静的変数とシングルトンに精通していますが、これに関する情報は見ていません。

public class MyImmutableClass {

    private final String string;

    public static final MyImmutableClass getInstance(String s) {

        if( a MyImmutableClass already exists with that string as its field)
            return (that instance);
        else
            return a new instance;

    }  

    ...

}  

MyImmutableClassの重複は存在できません。これは理にかなっていますか?もしそうなら、これをどのように実装しますか?

4

4 に答える 4

2
public final class MyImmutableClass {
private MyImmutableClass(){}
private final String string;
private static Map<String,MyImmutableClass> map = new WeakHashMap<String,MyImmutableClass>();
public static final MyImmutableClass getInstance(String s) {

    if(map.containsKey(s))
        return (map.get(s));
    else{
        MyImmutableClass temp = new MyImmutableClass(s);
        map.put(s,temp);
        return  temp;
    }
}  

...

}  

このようなものがあなたのために働くはずです。

于 2013-01-04T05:40:00.833 に答える
1

あなたが探しているのは、シングルトンパターンではなく、静的ファクトリパターンだと思います。Javaクラス自体には、この例がたくさんあります。たとえば、メソッドInteger.valueOf(myString);を呼び出す場合。似たようなことをしているのかもしれません。「1」を何度も渡すと、毎回同じIntegerオブジェクトが返される場合があります。

于 2013-01-04T05:36:56.517 に答える
1

これはフライウェイトパターンと呼ばれます。

最も簡単な実装は次のとおりです。

  • 同意するhashCode()とequals()を実装する
  • クラスへのキーのマップを使用して、すでにキーを持っているかどうかを判断し、インスタンスを保存します
于 2013-01-04T05:40:52.887 に答える
0

たとえば、再利用する可能性のあるオブジェクトを含むセットを保持する必要があります。主な問題は、単純に実行すると、ガベージコレクションが妨げられることです。

参照を自動的に削除できるように、WeakHashMapの使用を検討してください。

あなたが与える場合、あなたは文字列をオブジェクトにマップするでしょう。

于 2013-01-04T05:40:17.757 に答える