我想为某些属性创建一种对象:
import java.util.HashMap;
public class SourceLanguage {
private final String name;
private static HashMap<String,SourceLanguage> existing;
private SourceLanguage(String name){
this.name = name;
}
public String getName(){
return name;
}
public static SourceLanguage get(String name){
if(existing==null){
existing = new HashMap<>();
SourceLanguage sl = new SourceLanguage(name);
existing.put(name.toLowerCase(),sl);
return sl;
}
SourceLanguage check = existing.get(name);
if(check==null){
SourceLanguage sl = new SourceLanguage(name);
existing.put(name.toLowerCase(),sl);
return sl;
}else {
return check;
}
}
}
我想将此类的对象用作另一张地图中的键。
我觉得这有点矫kill过正。
有没有更简单的方法可以实现目标?
最佳答案
您可以使用Registry pattern进行调查。这样,可以将SourceLanguage
对象的行为与强制其唯一性的行为分开。它们也可能彼此变得更复杂。注册表可以处理注释中描述的内存泄漏,而不会弄乱您的SourceLanguage
类。
将SourceLanguage
和Registry类都放在同一个程序包中,但是使SourceLanguage
类程序包具有可见性(或为它提供protected
构造函数),然后外部组件将无法直接实例化SourceLanguage
并将必须通过注册表。
关于java - 一种物体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13407110/