簡體   English   中英

從列表Java中獲取對象

[英]Get the Objects out of a list Java

我做了一點文字冒險。 我目前正在處理庫存。 我嘗試使用列表進行清單: ArrayList<Object> inventar = new ArrayList<Object>(); 我將對象初始化為項目:

Item holzschwert = new Item("Holzschwert", 1, 5);
                inv.addToInventar(holzschwert);

這是我的添加方法:

    public void addToInventar(Object ...item){
    inventar.add(item);
}

但每次我想打印我的庫存(這是我的toString()函數)我仍然得到哈希代碼:

@Override
public String toString() {
    return "Inventar [ Inventar = " + inventar + " ]";
}

和我的打印方法

Object test = inv.getInventar();
                String ausgabe = inv.toString();
                System.out.println(ausgabe);

和控制台日志:

Inventar [ Inventar = [[Ljava.lang.Object;@281c35ec] ]

謝謝您的幫助 :)

錯誤是

public void addToInventar(Object ...item){
    inventar.add(item);
}

這里的item是一個Object[] ,因為你使用了varargs( ... )。 你看到的是在數組上調用toString的結果。

你要

public void addToInventar(Object item){
    inventar.add(item);
}

或者可能

public void addToInventar(Object... items){
    for (Object item : items)
        inventar.add(item);
}

編輯

除了這個答案,我應該指出你可能不應該使用List<Object> List<Item>會更好,因為編譯器更容易發現這樣的錯誤。 簽名addToInventar(Object... items)真的應該避免瘟疫一樣,因為它會從字面上接受任何長度的參數中的任何序列。 所有引用類型都是Object ,所有原語都可以自動裝箱。

重寫Item類toString()方法。

class Item{

   @override
   public String toString(){
       //Give your implementation
   }
}
@Override
public String toString() {
    StringBuffer stuff = new StringBuffer();
    for (Object item : inventar) {
        stuff.append(item.getName()); // you need a getter for the item name
        stuff.append(" ");
    }

    return stuff.toString();
}

您的庫存和物品都是物件。 如果只是打印對象而不是字段,則只能將其內存地址作為輸出:

Ljava.lang.Object;@281c35ec

不是你為他們設置的屬性。

如果您不關心輸出的確切格式,可以在Item類中執行以下操作:

@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}

ToStringBuilder是Apache Commons Lang庫的一部分。 如果你想以某種方式專門格式化,那么請使用@Code Whisperer並編寫自己的實現。

暫無
暫無

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

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