将<serializable>列为字符串</serializable>

时间:2012-09-03 10:04:33

标签: java

我的班级看起来像:

以下代码属于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())

2 个答案:

答案 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()+"");