我们这里有两种不同的方法,每个方法都有单独的类型参数。
public abstract <T extends AnotherClass> void getAndParse(Args... args);
这是一个带有名为 T 的类型参数的方法,其边界为AnotherClass
,意味着每个子类型AnotherClass
允许作为类型参数。
public <SpecificClass> void getAndParse(Args... args)
这是一个带有名为的类型参数的方法SpecificClass
, 被约束Object
(意味着每种类型都可以作为类型参数)。你真的想要这个吗?
是里面使用的类型参数Args
?我想问题就在那里。
的含义
public abstract <T extends AnotherClass> void getAndParse(T... args);
那是caller方法的类型可以决定他想要使用哪种类型参数来调用该方法,只要这是该方法的某个子类型AnotherClass
。这意味着实际上可以使用任何类型的对象调用该方法AnotherClass
.
由于调用者可以决定参数的类型,因此您不能在子类中将参数类型缩小为SpecificClass
- 这不是该方法的实现,而是另一个同名的方法(重载)。
也许你想要这样的东西:
public abstract class GetAndParse<T extends AnotherClass> {
public SomeClass var;
public abstract void getAndParse(T... args);
}
public class Implementor extends GetAndParse<SpecificClass> {
// some field declarations
// some method declarations
@Override
public void getAndParse(SpecificClass... args) {
// method body making use of args
}
}
Now the getAndParse
方法实现父类的方法。