我想为某些属性创建一个独一无二的对象:
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;
}
}
}
我想使用此类的对象作为另一个映射中的键。
我觉得这有点过分了。 有没有更简单的方法来实现目标?
最佳答案
您可以考虑使用Registry pattern 。这样,SourceLanguage
对象的行为就可以与强制执行其唯一性的行为分开。如果彼此独立,它们也可能变得更加复杂。注册表可以处理注释中描述的内存泄漏,而不会扰乱您的 SourceLanguage
类。
将SourceLanguage
和Registry类放在同一个包中,但使SourceLanguage
类package-visibile(或给它一个protected
构造函数),然后外部组件将无法直接实例化 SourceLanguage
,而必须通过注册表。
关于java - 独一无二的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407110/