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ても、コンテンツリストは必然的に空になるため、あまり意味がありません...



リストの内容を印刷する方法については、次の例を検討してください。

    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]

toString()ArrayList実装はリスト内の各エントリを呼び出すため、これは予想されることです。ただし、クラスにaを定義しなかった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()メソッドが定義されていることを確認してください。

于 2012-09-03T11:24:05.140 に答える
0

試す

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