获取对象列表

时间:2014-03-22 14:41:41

标签: java list object arraylist iterator

这让我发疯了 - 我怎样才能让应用程序完全打印出来:

auto1
auto2
auto3

这些是我想要显示的数组列表中的对象。在我的结果中,我得到的是三个对象内存地址的地址。

这是我的代码:

//Datenfelder
private ArrayList<Car> auto;
//End-Datenfelder


//Konstruktoren
CarCreator(){
    auto = new ArrayList<Car>();
    Car auto1 = new Car("Ferrari", "458 Italia", "Luxusklasse");
    auto.add(auto1);
    Car auto2 = new Car("Honda", "Civic", "Standardklasse");
    auto.add(auto2);
    Car auto3 = new Car("Mercedes-Benz", "C-Klasse", "Mittelklasse" );
    auto.add(auto3);
}
//Ende-Konstruktoren

这是构建对象的地方。默认情况下,类的构造函数将执行此操作。 现在,以下方法应按名称列出所有对象(auto1 - auto3)。 我已经创建了以下方法来获取显示的对象。

//Methoden
//generiere Liste mit der Anzahl Objekte
public void getCar(){
    Iterator<Car> scrawler = auto.iterator();
    while(scrawler.hasNext()){
        Car carObject = scrawler.next();
        System.out.println(carObject);
    }
}

如上所述,我得到的只是内存中地址的地址。我知道它必须按照我想要的方式工作,因为昨天我成功地显示了对象名称。

欢呼声
晴天

4 个答案:

答案 0 :(得分:1)

在派生类中覆盖toString()。 Object类实现了一个toString()方法,默认情况下返回其内存地址。您可以覆盖它以包含更多有用的信息。

答案 1 :(得分:1)

您希望Java将打印变量名称。这在很多方面都是错误的......

汽车是一个对象。您的变量是对该对象的引用。许多变量可以指向该对象,因此您无法知道要打印哪个变量(除非只有一个变量指向该对象)并且我不认为有办法获得此来自JVM的信息。

每个对象都有一个方法toString()。默认实现将打印一些奇怪的哈希。您可以覆盖此方法以返回对您的对象更有意义的String。

如果你想要你想要的输出,我建议你做一些像

这样的事情
int i = 1;
for(Car car : auto) {
    System.out.println("auto " + i);
}

答案 2 :(得分:0)

您可以在Object的类中编写方法getName,然后可以调用carObject.getName();

这种方法看起来像这样:

public String getName()
{
      return name;
}

您还可以为类创建一个toString方法,并在尝试从Object打印信息时在System.out.println中调用它。

答案 3 :(得分:0)

当您编写Car auto1时,您告诉编译器“我需要一个类型为car的变量,我将此变量称为auto1”...但是编译器将所有这些“text”转换为字节码,因此您将无法访问正在执行代码时的这些信息。

当您调用System.out.println(carObject);时,正在调用方法“toString()”。默认情况下,Java实现此方法显示指针地址(实际上就是您所看到的)。

尝试在您的Car课程中添加此内容并告诉我是否可以帮助您:

public class Car {

private String brand;
private String model;

public Car(String brand, String model) {
    super();
    this.brand = brand;
    this.model = model;
}

@Override
public String toString() {
    return "Car [brand=" + brand + ", model=" + model + "]";
}

}

你应该知道的最后一件事是Strings上的+运算符并且调用System.out会有性能成本所以,这样做只是为了测试,但是如果你想在你的代码上留下痕迹那么用户记录器和toString的更好实现。

最后一个提示,如果你使用eclipse,你可以点击你班上的右键 - &gt;来源 - &gt;生成toString()...这可以节省一些时间。