在开始编写这个简单程序之后,我遇到了一个我希望解释的逻辑错误。 toString()方法当前正在打印geographylist.GeographyList@15db9742

测试类别

public static void main(String[] args) {

    GeographyList g = new  GeographyList();


    g.addCountry ("Scotland");
    g.addCountry ("Wales");
    g.addCountry ("Ireland");
    g.addCountry ("Italy");

    System.out.println(g.toString());


ArrayList设置

public class GeographyList {

private ArrayList<String> countries;

public GeographyList(){
  countries = new ArrayList<>();
}

public ArrayList<String> getCountries() {
    return countries;
}

public String getCountry(int index){
    return countries.get(index);
}

public void addCountry(String aCountry){
  countries.add(aCountry);
  System.out.println(aCountry + " added.");
}

最佳答案

它打印geographylist.GeographyList@15db9742的原因是因为您没有打印ArrayList。您正在打印GeographyListGeographyList可能包含ArrayList,但这是偶然的。

the toString class继承的Object的默认实现是打印程序包名称geographylist,类名称GeographyList和哈希码15db9742

如果要覆盖此行为you will need to override the behaviour of toString,就像ArrayList类将自己完成一样。

可能看起来像这样:

public class GeographyList {
    //...

    @Override
    public String toString()
    {
        return countries.toString();
    }
}


另外,由于您已经可以从课程中获取ArrayList,因此您可以调用

System.out.println(g.getCountries().toString());


代替

System.out.println(g.toString());

10-07 13:10