我正在做一些文字冒险。我目前正在处理库存。我试着用清单做我的库存:
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] ]
感谢您的帮助:)
答案 0 :(得分:3)
错误是
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
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并编写自己的实现。