Java对象未返回预期的数据

Java对象未返回预期的数据,java,arrays,argument-passing,Java,Arrays,Argument Passing,我有下面的方法,它将数据传递到一个也包含在内的对象中。如果我一步一步地调试程序,那么我可以看到正确的数据被传递到对象中的每个字段中。但是,一旦我尝试执行println,我就无法从对象返回正确的数据 对于循环的每次迭代,来自刮取的数据以如下方式传递到对象: [Prague, Aer, Lingus, EI645, 24, Feb, 17:15, Arrived, 17:32] 并分配给所有字段,没有问题。当我调用print方法时,我会得到以下结果,而不是上面的一行 ===============

我有下面的方法,它将数据传递到一个也包含在内的对象中。如果我一步一步地调试程序,那么我可以看到正确的数据被传递到对象中的每个字段中。但是,一旦我尝试执行println,我就无法从对象返回正确的数据

对于循环的每次迭代,来自刮取的数据以如下方式传递到对象:

[Prague, Aer, Lingus, EI645, 24, Feb, 17:15, Arrived, 17:32]
并分配给所有字段,没有问题。当我调用print方法时,我会得到以下结果,而不是上面的一行

====================TEST=======================
com.beezer.DublinAirportArrivals.ArrivalDetails@25595f51
================END TEST=======================
我做错了什么

public HtmlParser(Properties config) throws IOException{

    url = config.getProperty("url");
    airline = config.getProperty("airline");

    print("Fetching.........%s" , url);

}

public ArrayList<ArrivalDetails> process() throws IOException{
    Document doc = Jsoup.connect(url).get();

    Elements tableRow = doc.getElementsByTag("tr");

    for(Element tr : tableRow){
        if(tr.text().contains(airline)){
            if(tr.text().contains("Arrived")){
            String delims = "[ ]+";
            String[] singleRowArray = tr.text().split(delims);
            ArrivalDetails temp = new ArrivalDetails(singleRowArray);
            capture.add(temp);
            }
        }

    }
    testPrint();
    return capture;
}

public static void testPrint(){
    System.out.println("====================TEST=======================");
    System.out.println(capture.get(capture.size()-1));
    System.out.println("================END TEST=======================");
}

您看到了的结果,但尚未在
ArrivalDetails
中覆盖它

此方法返回一个等于以下值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 
重写它,以便控制该类实例的输出。在该方法中,您构造并返回将传递给
System.out.println
字符串

调用
toString()
的原因是字符串转换,包括:

[T] 转换是通过调用引用对象的toString方法(不带参数)来执行的;但是如果调用toString方法的结果为null,则使用字符串“null”


用一些“胶水解释”扩展其他答案

打印结果

o.toString()

由于没有重写
toString
,因此
Object#toString
的原始实现适用。

您需要向类中添加
toString()
方法。这表示打印此类型的对象时要显示的内容。下面是一个可以添加到类中并可以修改的示例

@Override
public String toString() {
    return origin + " " + date;
}
但是请注意,在编写类时,没有任何变量是可访问的。您在构造函数中创建它们,并且它们仅在构造函数中可见/可用。您需要使它们成为类变量。你可以这样改变它

public class ArrivalDetails {

    String origin;
    String airline1;

    public ArrivalDetails(String[] singleRowArray) {
        this.origin = singleRowArray[0];
        this.airline1 = singleRowArray[1];
    }
}

查看关于StackOverflow的其他问题,了解更多信息

你还没有重写你的
ArrivalDetails
类的
toString()
方法。你能给我解释一下吗?当你说
println(capture.get(capture.size()-1))
时,Java的可能副本不知道你想显示什么。您希望它只打印原点吗?也许只是约会?您必须通过编写
toString()
方法来指定要打印的内容。@mcgowan.b鉴于这个问题以及您的其他问题,我敦促您花一些时间了解Oracle提供的非常好的免费在线服务。下面回答了这个问题。太好了。如果我想使用我在println上获得的输出作为字符串,我该怎么做呢。我可以调用toString方法并使用返回字符串吗?如果您的意思是
string s=myObject.toString()
可以这样做。
@Override
public String toString() {
    return origin + " " + date;
}
public class ArrivalDetails {

    String origin;
    String airline1;

    public ArrivalDetails(String[] singleRowArray) {
        this.origin = singleRowArray[0];
        this.airline1 = singleRowArray[1];
    }
}