我的班级看起来像:
以下代码属于MethodCall类:
public static class InnerValue {
@XmlElementRef(name = "string", type = JAXBElement.class)
@XmlMixed
protected List<Serializable> content;
public List<Serializable> getContent() {
if (content == null) {
content = new ArrayList<Serializable>();
}
return this.content;
}
}
当我尝试调用Innervalue的getContent
方法时,它返回对象,当我尝试将Object转换为String时,我失败了。
我使用以下代码将其从Object转换为String,但它仍然显示Object。
System.out.println(MethodCall.getContent.toSting())
答案 0 :(得分:1)
调用System.out.println(MethodCall.getContent().toSting());
甚至不会编译。如果编译,那么在MethodCall类中有一个静态getContent()
方法,这就是被调用的方法。
你问题中的方法getContent()
方法不是静态的,所以你需要一个类的实例来调用它,如下所示:
InnerValue innerValue = new InnerValue();
System.out.println(innerValue.getContent());
执行此操作时,请不要忘记导入:
import <yourpackagename>.MethodCall.InnerValue;
然而,创建这样的InnerValue
实例没有多大意义,因为内容列表不可避免地会变空......
关于如何打印列表内容,请考虑以下示例:
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()
定义SerializableImpl
,因此调用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()
上调用List
时,将调用列表中条目的toString()
方法。因此,如果您想要可读输出,请确保添加到列表中的所有对象都定义了toString()
个方法。
答案 1 :(得分:0)
尝试
System.out.println(MethodCall.getContent()+"");