我有一个抽象类,定义如下:
public abstract class BaseClass<T extends FirstClass, U extends BaseAnother<? extends SecondClass>> {
我不想使用问号(?
)并且想要使用一些通用的变量,例如 T
或者 U
。
我该怎么做?
我有一个抽象类,定义如下:
public abstract class BaseClass<T extends FirstClass, U extends BaseAnother<? extends SecondClass>> {
我不想使用问号(?
)并且想要使用一些通用的变量,例如 T
或者 U
。
我该怎么做?
它是public abstract class BaseClass<X extends SecondClass, T extends FirstClass, U extends BaseAnother<X>> {
,不是吗?
(我添加了X extends SecondClass)
考虑一下你将如何使用这个类型变量。当定义类时声明它的方式是将它传递给new BaseClass< /* type parameters - here */> { ... }
。
同时请注意,根据JLS,类型参数在类定义中的一个地方声明:
NormalClassDeclaration: ClassModifiersopt class Identifier TypeParametersopt Superopt Interfacesopt ClassBody
请参阅8.1.2. Generic Classes and Type Parameters章节中的示例:
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(); }
}