从列表Java中获取对象

时间:2015-04-01 19:35:40

标签: java list object

我正在做一些文字冒险。我目前正在处理库存。我试着用清单做我的库存: 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] ]

感谢您的帮助:)

4 个答案:

答案 0 :(得分:3)

错误是

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

此处itemObject[],因为您使用了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 s,所有原语都可以自动装箱。

答案 1 :(得分:0)

重写Item类toString()方法。

class Item{

   @override
   public String toString(){
       //Give your implementation
   }
}

答案 2 :(得分:0)

@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

不是您为他们设置的属性。

答案 3 :(得分:0)

如果您不关心输出的确切格式,可以在Item类中执行以下操作:

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

ToStringBuilder是Apache Commons Lang库的一部分。如果你想以某种方式专门格式化,那么请使用@Code Whisperer并编写自己的实现。