gpt4 book ai didi

java - 仅允许具有唯一名称的对象 - Java

转载 作者:行者123 更新时间:2023-11-30 03:23:50 24 4
gpt4 key购买 nike

我正在制作一个库存系统。

我想确保我正在创建的对象(成分)都有唯一的名称。换句话说,我想确保整个程序中永远不会有两个具有相同名称的成分。目前我有以下类(class):

package ingredient;

import java.util.HashSet;

public class Ingredient {

private final String name;
private final double price;

private static HashSet<String> names = new HashSet<String> ();

private Ingredient(String ingr_name, double ingr_price) {
name = ingr_name;
price = ingr_price;
}

public static Ingredient createIngredient(String ingr_name, double ingr_price) {
if (names.contains(ingr_name)) {
return null;
} else {
names.add(ingr_name);
return new Ingredient(ingr_name, ingr_price);
}
}

public String getName() {
return name;
}

public double getPrice() {
return price;
}

}

然后,当我实际制作新原料时,我会做出如下声明:

Ingredient egg = Ingredient.createIngredient("egg", 1);

这样的设计好吗?我想我很担心,因为返回“NULL”可能不是这里的最佳实践。

最佳答案

我无法发表评论,但无论如何......我会通过将所有成分存储在不同的类中来解决此问题,然后您就不需要所有这些静态废话。在您实际创建新成分的类中 (Ingredient Egg = Ingredient.createIngredient("egg", 1);),您可以创建一个 ArrayList 成分,如下所示:

ArrayList<Ingredient> ingredients = new ArrayList<>();

然后,当您制作新的成分时,您只需确保将其添加到ArrayList中,并且在执行此操作时,检查是否没有任何成分已经在那里了,也许是这样的:

createIngredient("egg", 1);

Ingredient egg = createIngredient("egg", 1);

...

private Ingredient createIngredient(String ingr_name, double ingr_price){
for(Ingredient i : ingredients){
if(i.getName().equals(ingr_name)){
return null;
}
}
Ingredient newing = new Ingredient(ingr_name, ingr_price);
ingredients.add(newing);
return newing;
}

然后,Ingredient 类可以简化为如下所示:

package ingredient;

public class Ingredient {

private final String name;
private final double price;

public Ingredient(String ingr_name, double ingr_price) {
name = ingr_name;
price = ingr_price;
}

public String getName() {
return name;
}

public double getPrice() {
return price;
}
}

然后,您可以通过运行 ArrayList 的方法来访问每个单独的 Ingredient,并找到具有您要查找的名称的 Ingredient :

public Ingredient findIngredient(String name){
for(Ingredient i : ingredients){
if(i.getName().equals(name)){
return i;
}
}
return null;
}

关于java - 仅允许具有唯一名称的对象 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30739370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com