簡體   English   中英

Java:枚舉/構造函數

[英]Java: Enums / constructors

我有以下代碼:

public class Item{
String name, color;
int weight, volume, cost;

public Item(String name, int weight, int volume, int cost, String color){
    this.name= name;
    this.weight = weight;
    this.volume = volume;
    this.cost = cost;
    this.color = color;
}

我用它通過將數據加載到csv文件中來創建項的ArrayList。 我有數組中的項目,例如Apple,Pear,Noodles等。當前要查看這些項目,我必須調用itemList.get(2)。 我希望能夠調用itemList.APPLE或某些變體,所以我不必總是知道與該項目關聯的索引號。 有沒有辦法做到這一點? 看來這將是一個枚舉技巧。

接下來,我有一個類似的類,但我想使用以下對象創建對象x:

物品x =新物品(200,重量);

x.toString()......輸出:重量= 200,體積= 0,成本= 0,值= 0,基數= 0,高度= 0

從此代碼:

public class Item{
int weight, volume, cost, value,
base, height;

public Item(int x, String variable) {
    //some code 
}

在代碼中,我將從將所有變量設置為0開始,但是然后我需要使用字符串值來選擇要添加x的變量。 我該怎么做? 如果string.equals(“ __”),我可以使用if語句較大的if if else語句將x添加到各個變量中,但是我簡化了變量; 實際上大約有30個。 我是否只需要聲明很長的if語句,還是有更好的方法?

首先,根據您使用的列表抽象,可以指定將值放置在何處。 相反,如果您想隨時檢索特定對象,請查看Map

Map<String, Item> itemMap = new HashMap<>();
itemMap.put("apples", new Item("Apple", 1, 1, 1, "Red"));
itemMap.get("apples");  // gives you the item you placed in as an Apple

當然,您需要在執行此操作之前覆蓋equals()hashCode() 此外,將不允許您向映射輸入重復的值。

接下來,第二步可以通過反射來完成,但是為什么不只使用常規的setter和getter?

Item item = new Item(); // or whichever constructor you choose
item.setWeight(200); // sets weight to 200
System.out.println(item); // will print item as you wish

將30個變量替換為Map,將每個名稱映射到其值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM