我有下面的方法,它将数据传递给一个也包含在内的对象。如果我逐步调试程序,那么我可以看到正确的数据被传递到对象中的每个字段。但是,一旦我尝试执行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];
}
}
答案 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()
并且由于您没有覆盖toString
,Object#toString
的原始实施适用。