これはキーバリューペアのキャッシュ設計のようですが、スレッドセーフではありません。
なぜマップの代わりに2つのセットがありますか?
あなたはhttps://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom
import java.util.Hashtable;
import java.util.Map;
public class Properties
{
private Map<String,String> properties = new Hashtable<>();
private Properties(){}
private static class PropertiesHolder{
private final static Properties instance = new Properties();
}
public static Properties getInstance(){
return PropertiesHolder.instance;
}
public void put(String property, String value){
properties.put(property, value);
}
public void get(String property){
properties.get(property);
}
}
シングルトンホルダー付きスレッドセーフシングルトンとHashtableの
を作ることができるし、自分のクラスに
Properties properties = Properties.getInstance();
properties.put("foo","bar");
properties.get("foo");
を使用する
class PropertyValue{
String cid;
String property;
String value;
public PropertyValue(String cid, String property, String value) {
this.cid = cid;
this.property = property;
this.value = value;
Properties properties = Properties.getInstance();
properties.put(property, value);
}
}
しかし、私は、このキー値 "store"を維持するPropertyValueクラスの責任ではないと思います。 このストアは、新しいPropertyValueインスタンスの後(または前)にコンストラクタではなく読み込まれます。
https://en.wikipedia.org/wiki/Single_responsibility_principle
[いいえ、そうでないペアによってプロパティと値を格納する必要があり、または直接シングルトン
にPropertyValueをの設定を保存しない場合は、文字列のあなたの二組を保つことができます。しかし、別々に、任意の種類の可変静的変数を持つことは、通常、反パターンです。 –
これらの値に関心を持つクライアントコードがあれば、索引付けを処理できるようにする方がはるかに優れています。 – chrylis
静的カウンタのようには機能しませんか? – marlon