避免静态方法创建具有相同值的实例

我的程序应该无法创建具有相同名称值的新实例,但我不知道该怎么做。我想在代码中加入一些 if 语句,但不知道如何实现它

public class Smurf {

    private String name;

    public static Smurf createSmurf(String name) {
        System.out.println("Creating " + name + " Smurf");
        return new Smurf(name);
    }

    private Smurf(String name) {
        this.name = name;
    }

    public void printName() {
        System.out.println("My name is " + name + " Smurf.");
    }

    public void eat() {
        System.out.println(name + " Smurf is eating Smurfberries.");
    }

}

回答

不会为你做功课,而是一些指导:

  • 是的,当一个 Smurf 实例有一个name 时,那么您的类中需要一个非静态字段来表示该名称
  • 但是:当您想确保名称是唯一的时,您需要以某种方式跟踪所有已知/使用过的名称

一个非常简单(容易出错,不适合现实世界)的解决方案:您可以private static final List<String> usedNames = new ArrayList<>()在该类中使用一个。

该列表是static,因此类的所有实例都会看到相同的列表。

现在您可以检查您的创建方法,是否作为参数提供的名称已经在该列表中。如果是这样,请拒绝创建新的 Smurf。否则,创建新的 Smurf,并将新名称添加到该列表中。

如果您想知道“为什么这在现实世界中不起作用”:因为 A) Smurf 类跟踪所有Smurf 名称是一个糟糕的设计,并且 B) 也许 GargamelCareless Smurf在某个时候吃东西。然后您需要额外的代码才能从列表中删除该名称。或者,当Careless Smurf想要重新生成时,您不能再次使用该名称。等等。

注意:尽管在撰写此答案期间没有蓝精灵受到伤害。


以上是避免静态方法创建具有相同值的实例的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>