java - 独一无二的元素

标签 java

我想为某些属性创建一个独一无二的对象:

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/

相关文章:

java - 在 Windows 8.1 上使用 lwjgl 渲染时闪烁

java - 使用struts时在jsp中写ServletOutputStream

java - 在没有任何引用的情况下对同一个对象调用多个方法

java - 不同 PC 上的 RMI

Java向xml文件添加具有属性的元素

java - Android - 新 Intent 启动特定方法

java - Android:将 TextView 作为参数传递给外部函数返回 nullpointerException

java - 从oracle数据库导出到csv文件

java - lwjgl isKeyDown 取消其他键

java - 使用 Swing 的多线程