我有一个抽象类,定义为:
public abstract class BaseClass<T extends FirstClass, U extends BaseAnother<? extends SecondClass>> {
我不想使用问号(?
)并使用一些通用变量,如T
或U
。
我该怎么做?
答案 0 :(得分:0)
是的
public abstract class BaseClass<X extends SecondClass, T extends FirstClass, U extends BaseAnother<X>> {
,不是吗?
(我添加了 X扩展了SecondClass )
考虑如何使用此类型变量。在定义类时声明它的方法是在new BaseClass< /* type parameters - here */> { ... }
中将其路径化。
另请注意,根据JLS,类型参数在类定义中声明在一个地方:
NormalClassDeclaration: ClassModifiersopt类标识符TypeParametersopt Superopt Interfacesopt ClassBody
请参阅下面的示例 8.1.2。通用类和类型参数章节:
interface ConvertibleTo<T> {
T convert();
}
class ReprChange<T extends ConvertibleTo<S>,
S extends ConvertibleTo<T>> {
T t;
void set(S s) { t = s.convert(); }
S get() { return t.convert(); }
}