该调用System.out.println(MethodCall.getContent().toSting());
甚至不会编译。如果编译成功,那么您getContent()
的 MethodCall 类中有一个静态方法,这就是被调用的方法。
您问题中的方法getContent()
方法不是静态的,因此您需要其类的实例来调用它,如下所示:
InnerValue innerValue = new InnerValue();
System.out.println(innerValue.getContent());
当你这样做时,不要忘记导入:
import <yourpackagename>.MethodCall.InnerValue;
然而,创建这样的InnerValue
实例没有多大意义,因为内容列表不可避免地会是空的......
至于如何打印 list 的内容,请考虑以下示例:
class SerializableImpl implements Serializable {
private static final long serialVersionUID = 1L;
};
List<Serializable> list = new ArrayList<Serializable>();
list.add(new SerializableImpl());
System.out.println(list);
使用此代码,我将获得输出:
[test.MyTestClass$1SerializableImpl@1befab0]
这是意料之中的,因为 ArrayList 实现会调用toString()
列表中的每个条目。但是由于我们没有toString()
为 class 定义 a ,所以会调用classSerializableImpl
中的默认toString()
方法。Object
我们如何解决这个问题?考虑上面代码的替代方案:
class SerializableInteger implements Serializable {
private static final long serialVersionUID = 1L;
private int value;
public SerializableInteger(int value){
this.value = value;
}
public String toString(){
return "value = " + value;
}
};
List<Serializable> list = new ArrayList<Serializable>();
list.add(new SerializableInteger(42));
System.out.println(list);
现在会发生什么?嗯...因为我们toString()
为类定义了一个方法SerializableInteger
,该方法将被调用,我们将收到输出:
[value = 42]
因此,总而言之:当您调用toString()
aList
时,toString()
将调用列表中条目的方法。因此,如果您想要可读的输出,请确保您添加到列表中的所有对象都toString()
定义了方法。