我正在做一个小小的文字冒险。我目前正在处理库存。我试着用一个 list 来做我的 list :
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[]
,因为您使用了可变参数 ( ...
)。您看到的是调用 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 和所有基元都可以自动装箱。
关于java - 从 Java 列表中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399301/