我正在製作庫存系統。只允許具有唯一名稱的對象 - 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」可能不是這裏的最佳做法。
a)in'createIngredient(...)'你爲什麼返回' null'而不是已經創建的'Ingredient'? b)這基本上是內存泄漏的Java版本,因爲即使只有靜態字段「names」引用了「Ingredient」,它也不會被垃圾回收。你可能想看看[this](https://weblogs.java.net/blog/2006/05/04/understanding-weak-references)。 – Turing85
這很好,如果您只是在嘗試,但是,如果您需要在多線程系統中運行該代碼,則會出現問題。 – Bill
@ Turing85關於(a)...另一種方法是將已經創建的成分的實際指針存儲在一個集合中嗎? (我目前正在用他們的名字做什麼) –