采用通用对象并返回另一个通用对象的方法的签名应该是什么,该对象与原始类相同还是子类?也就是说,如果该方法采用一些泛型 class 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
的对象并将对象传递给它。