我正在制作库存系统。
我想确保我创建的对象(成分)都具有唯一的名称。换句话说,我想确保在整个程序中从不存在两个具有相同名称的成分。目前我有以下课程:
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”可能不是最好的做法。
答案 0 :(得分:1)
我建议
A)返回已经创建的成分
或者,如果这会使调用者感到困惑,
B)抛出异常
这可以是简单的IllegalArgumentsException
,也可以根据您的需要自定义异常类。
答案 1 :(得分:1)
我不能评论,但无论如何......
我会通过将所有成分存储在不同的类中来解决这个问题,那么你就不需要所有这些静态的废话了。在您实际创建新成分(% Finite difference example: cubic function
% f(x)=x^3+x^2-1.25x-0.75
% finite difference approximation to 1st derivative, error O(h)
x=-2:0.1:1.2;
plot(x, polyval([3 2 -1.25],x), 'g-'); % analytical 1st derivative
h=0.4; % step size
n=(1.2-(-2))/h+1;
x=-2:h:1.2
f=polyval([1, 1, -1.25, -0.75], x)
f1=conv([1, -1], f) % finite differences, only f1(2:9) are useful
f1=f1(2:9)/h % approximation to 1st derivative
hold on; % keep the above graph
plot(x(1:8)+h/2, f1,'r-'); % FD approximation to 1st derivative
hold off;
)的类中,您可以创建Ingredient egg = Ingredient.createIngredient("egg", 1);
成分,如下所示:
ArrayList
然后,当你制作一个新的ArrayList<Ingredient> ingredients = new ArrayList<>();
时,你只需要确保将它添加到Ingredient
,当你这样做时,检查没有任何成分已经存在,可能是类似的这样:
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;
}
}
的方法访问每个人Ingredient
,并找到您要查找的名称的ArrayList
:
Ingredient