3

次のように定義された抽象クラスがあるとします。

public class Response<T> {
    private List<Response<T>> subResponses;
}

そして、次のように定義された 2 つのサブクラス:

public class SectionResponse extends Response<SectionResponse> {
}

public class FormResponse extends Response<FormResponse> {
}

基本的に、Response のすべてのサブクラスは、同じクラスのリストを持つ必要があります。ここで、コードの別の場所に、いずれかのサブクラスを含むことができる Response オブジェクトのリストが必要です。

生の型を使用せずにこのリストを定義する最良の方法は何でしょうか? 試してみましList<? extends Response<?>>たが、パラメーターがパラメーター化された型であるため、このように定義された List で add メソッドを呼び出すことができません。

4

3 に答える 3

1

クラスResponseは次のように定義する必要があります。

public class Response<T> {
    private List<T> subResponses;
}

そのため、宣言されているように、 and は自分自身のリストを持ちますSectionResponseFormResponse

さて、文字通りあなたの質問に答えると、どちらかを含むことができるリストについては、List<Response<?>>.

しかし、おそらくそれ以上のことを望んでいるでしょう。おそらく、リストから要素を取り出して、それらに何かをしたいと思うでしょう。できるようにする必要があることをより具体的に教えていただける場合は、さらにお手伝いさせていただきます。

于 2013-03-18T22:27:01.263 に答える
0

あなたが何をしたいのか正確にはわかりませんが、これはうまくいき、少なくともあなたが説明する問題に触れています:

public class Response<T extends Response> {
    private List<T> sl = new LinkedList<T>();

    protected void add(T resp) {
        sl.add(this);
    }
}

public class FormResponse extends Response<FormResponse> {
    public FormResponse() {
        add(this);
    }
}
于 2013-03-18T23:41:23.907 に答える