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

时间:2015-06-09 17:53:12

标签: java

我正在制作库存系统。

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

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”可能不是最好的做法。

2 个答案:

答案 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