Java 维护一组类似对象的建议

Java 维护一组类似对象的建议,java,Java,我有一门课要讲大陆。我创建了许多这样的实例。我希望将所有此类实例存储在一个集合中。每次创建新对象时,都应将其添加到集合中 public class Continent { private static HashSet<Continent> globalContinents = new HashSet(); final private String continent_name; Continent(String continent_name){

我有一门课要讲大陆。我创建了许多这样的实例。我希望将所有此类实例存储在一个集合中。每次创建新对象时,都应将其添加到集合中

public class Continent {

    private static HashSet<Continent> globalContinents = new HashSet();
    final private String continent_name;

    Continent(String continent_name){
        this.continent_name = continent_name;
        Continent.globalContinents.add(this);
    }
}

这是给我一个物体泄漏的警告。我将使用多线程,那么,您有什么建议可以有效地实现这样的事情吗?一个设计思想?

Mabye更容易作为一个内部类实现:

public class Earth {

    private static HashSet<Continent> globalContinents = new HashSet();

    public Earth() {

    }

    public void addContinent(String name) {
        globalContinents.add(new Continent(name));
    }

    private class Continent {

        private String continent_name;

        public Continent(String continent_name){
           this.continent_name = continent_name;

        }

        public String getName() {
            return this.continent_name;
        }
    }

}

所以,所有的圆锥元素都在地球的散列集中,所以你只需要创建一个地球对象,然后用AddContinents添加圆锥元素。

你可以为你的大陆创建一个简单的工厂

public class ContinentFactory {
    private Set<Continent> continents = new HashSet<>();

    public Continent create(String name) {
        Continent continent = new Continent(name);
        continents.add(continent);
        return continent;
    }

    public static class Continent {
        private String continentName;

        public Continent(String continentName) {
            this.continentName = continentName;
        }

        ...
        equals and hashcode 
        ....
    }
}
您还应该遵循Java命名约定:

首先,如果这是您的整个大陆类,那么您需要实现equals和hashCode以满足集合的约定,例如,委托给您的大陆名称我想到的一件事是使用静态方法创建对象,并将其添加到集合中。这个解决方案听起来很公平?非常感谢,有什么好的资源可以了解更多关于“工厂”设计的信息吗?这只是对创建一个大陆的抽象。但是,如果您想探索用java实现的众多模式,我建议您使用这个存储库-