私はJavaをよく知らないので、この実装がOKかどうか質問したいと思います。 (スレッドセーフではありません)。私はTクラスごとに単一のユニークなシングルトンを望みます。各(ジェネリック)タイプのための1つのシングルトン
public class MockDatabase<T> {
private MockDatabase() {}
private static Map<String, MockDatabase> singletonHolder = new HashMap<String, MockDatabase>();
public static <T> MockDatabase<T> getInstance(Class<T> clazz) throws InstantiationException, IllegalAccessException {
MockDatabase<T> singleton = (MockDatabase<T>)singletonHolder.get(clazz.getName());
if (singleton == null) {
singleton = new MockDatabase<T>();
singletonHolder.put(clazz.getName(), singleton);
}
return singleton;
}
}
なぜ 'clazz'ではなく' clazz.getName() 'をキーしますか? –
生の型を使うべきではありません( 'Map'は生の 'MockDatabase'を使います)。また、クラスパラメータ 'T'とメソッド汎用パラメータ' 'に同じタイプの文字を使うべきではありません。これは、それらが同じ型であるという錯覚を作り出すからです。 –
RealSkeptic
所有者が所有していないときに作成するシングルトンインスタンスをキャッシュに入れないのはなぜですか? ...のpublic staticは MockDatabase のgetInstanceを(同期) –
davidxxx