0

我正在尝试打印数组中的项目,但是当我运行程序时,它会打印出 Orders:testorder@4, testorder@5等等。关于如何修复它以使其写入 123 Buy 的任何提示?

package hej;


public class TestOrder {
public static void main(String[] args) {

    Order order1 = new Order("123", "Buy");
    Order order2 = new Order("456", "Sell");
    Order order3= new Order("231", "Buy");
    Order order4= new Order("987", "Buy");


    OrderRegister orderregister = new OrderRegister();


    orderregister.addOrder(order1);
    orderregister.addOrder(order2);
    orderregister.addOrder(order3);
    orderregister.addOrder(order4);


    System.out.println("Orders: ");        
    for (int i = 0; i < orderregister.getArrayList().size(); i++){
        System.out.println(orderregister.getArrayList().get(i) + "-");

    }
}   

}

4

5 回答 5

7

因为您没有为您的类toString()定义方法。Order

当 Java 尝试打印一个 Object 时,它会尝试调用该toString()Object 的方法,如果找不到,它会使用toString()Object 超类中的方法。

默认情况下,对象会这样做toString()

getClass().getName() + '@' + Integer.toHexString(hashCode())

这正是您所看到的输出。

于 2013-01-09T17:40:02.193 回答
2

TestOrder覆盖该toString()方法。

于 2013-01-09T17:40:16.780 回答
1

当您将对象与字符串连接时(就像在您的System.out.println(...)语句中一样),toString()首先在对象上调用该方法以将其转换为字符串。

您需要覆盖类toString()上的方法Order并让它生成订单的字符串形式。

于 2013-01-09T17:40:26.563 回答
1

这正是您应该期待的,因为您还没有告诉 Java 任何其他方式将 an 转换Order为 a String。如果Order.toString()您希望 Java 使用某种特定方式将 a 转换OrderString.

于 2013-01-09T17:40:37.220 回答
1

您可以/应该尝试toString()按照其他人的建议覆盖该方法(在您的示例中隐式调用)。

例如:

@Override public String toString()
{
return String.format("%s , %s", this.getID(), this.getAction());
}
于 2013-01-09T17:50:51.953 回答