我想为某些属性创建一种对象:

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/

10-10 08:01