呼び出し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()
メソッドが定義されていることを確認してください。