我熟悉静态变量和单例,但我没有看到任何关于此的信息:
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的重复项。这是否有意义,如果是这样,你将如何实现这一点?
答案 0 :(得分: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;
}
}
...
}
这样的事情对你有用。
答案 1 :(得分:1)
我认为你要找的是Static Factory模式,而不是Singleton模式。 Java类本身有很多这方面的例子。例如,如果您调用方法Integer.valueOf(myString);,则可能会做类似的事情。如果一遍又一遍地传入“1”,则每次都可能返回相同的Integer对象。
答案 2 :(得分:1)
答案 3 :(得分:0)
你需要保持,例如包含可能重用的对象的集合。主要的复杂因素是,如果它天真地完成,你就可以防止垃圾收集。
考虑使用WeakHashMap,以便可以自动删除引用。
在您给出的情况下,您可以将String映射到对象。