ジェネリック オブジェクトを受け取り、別のジェネリック オブジェクト (元のクラスと同じかサブクラス) を返すメソッドのシグネチャは何ですか? つまり、メソッドがジェネリック クラスA
を使用する場合、返されるオブジェクトは(直接的または間接的に) 次のいずれA
かであることが保証されます。B
B extends A
以下のコードは、関数で私がやろうとしていることを例示していますgetList()
:
package com.company;
import java.util.ArrayList;
public class Main {
private Main(){
List<String> stringList = new GenericMessageListCreator.getList(StringGenericMessage.class);
}
private class GenericMessageListCreator() {
public List<GenericMessage<T1>> getList(Class<T1 extends GenericMessage> clazz) {
return new ArrayList<T1>();
}
}
private class GenericMessage<T> {
public GenericMessage(){};
private T internalValue;
public void setValue(T value) {
this.internalValue = value;
}
public void echoValue() {
System.out.println("I contain " + internalValue);
}
}
private class StringMessage extends GenericMessage<String>{}
private class IntegerMessage extends GenericMessage<Integer>{}
}
例はさておき、実際にはCommand
、コマンド パターンで s に使用されるクラスのレジストリを作成しています。Command
クラスごとにオブジェクトを取得したら、適切なものをフェッチしてオブジェクトを渡したいと思います。