2

我的课看起来像:

以下代码位于 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。

System.out.println(MethodCall.getContent.toSting())
4

2 回答 2

2

该调用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()定义了方法。

于 2012-09-03T11:24:05.140 回答
0

尝试

System.out.println(MethodCall.getContent()+"");
于 2012-09-03T11:01:57.900 回答