关于ArrayList中的toString()和内存引用

时间:2016-07-09 12:37:30

标签: java arraylist tostring

我有一个class,其中有一个ArrayList,它的逻辑让我们称之为Stomach。

来自class MealDrinks的两个实例已添加到ArrayList Main中的class。这两个类有一个覆盖的方法,它返回getName()方法。

但在我执行所有操作的class的{​​{1}}中,我无法使用foreach循环使用ArrayList对象的toString()方法。

ArrayList

我尝试在public void amountOfElements() { for (Digestion d : stomach) { //prints the hash code. I can't call the corresponding toString() equivalent in here. System.out.println(d); } Stomach中创建一个属性class,然后从中调用该方法,但我得到了ArrayList,因为名字没有'还存在。

我必须这样解决,因为实现了返回名称的方法。

提前致谢。

2 个答案:

答案 0 :(得分:6)

覆盖toString和/或其子类中的Digestion方法,以返回要为Digestion个实例输出的任何字符串:

class Digestion { // or `class Meal` or `class Drink` or `class Stomach`, etc.
    // ...other implementation...

    @Override
    public String toString() {
        String result;
        /* logic assigning to `result` goes here */
        return result;
    }
}

完整示例(live copy):

class Example
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Digestion[] stomach = new Digestion[] {
            new Meal(),
            new Drink(),
            new Snack()
        };

        for (Digestion d : stomach) {
            System.out.println(d);
        }
    }
}
class Digestion {
    @Override
    public String toString() {
        return "I'm a Digestion instance";
    }
}
class Meal extends Digestion {
    @Override
    public String toString() {
        return "I'm a Meal instance";
    }
}
class Drink extends Digestion {
    @Override
    public String toString() {
        return "I'm a Drink instance";
    }
}
class Snack extends Digestion {
    @Override
    public String toString() {
        return "I'm a Snack instance";
    }
}

输出:

I'm a Meal instance
I'm a Drink instance
I'm a Snack instance

答案 1 :(得分:1)

为了能够做到这一点:

for (Digestion d : stomach) {

胃必须持有消化对象或实施消化的物体,具体取决于消化是什么(类或界面)

所以你需要确保用餐饮料是超级消化的子类,并且两者都有{{ 1}}方法正确覆盖...

所以 每个班级都应该有像

这样的方法
toString