Java对象未返回预期的数据

时间:2014-02-24 21:21:34

标签: java arrays argument-passing

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

对于循环的每次迭代,来自scrape的数据作为:

传递给对象
[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=======================");
}

这是我的其他课程

public class ArrivalDetails {

    public ArrivalDetails(String[] singleRowArray) {
        String origin = singleRowArray[0];
        String airline1 = singleRowArray[1];
        String airline2 = singleRowArray[2];
        String flightNo = singleRowArray[3];
        String date = singleRowArray[4];
        String month = singleRowArray[5];
        String ArrTime = singleRowArray[6];
        String status = singleRowArray[7];

    }

}

3 个答案:

答案 0 :(得分:1)

您看到了toString() method on the Object class的结果,并且您没有在ArrivalDetails中覆盖它。

  

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

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

覆盖它,以便您控制该类实例的输出。在该方法中,您构造并返回将传递给String的{​​{1}}。

调用System.out.println的原因是因为字符串转换,由JLS Section 5.1.11覆盖:

  

[T]执行转换就好像通过调用没有参数的引用对象的toString方法一样;但是如果调用toString方法的结果为null,则使用字符串“null”。

答案 1 :(得分:1)

您需要在班级中添加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上的其他问题。 How to use toString() in Java

答案 2 :(得分:0)

通过一些&#34;胶水解释&#34;,

扩展其他答案
System.out.println(Object o);

打印

的结果
o.toString()

并且由于您没有覆盖toStringObject#toString的原始实施适用。