假设我有一个这样的类和方法:
class MyClass<T> {
void doStuff(Wrapper<T> wrapper) {
//impl.
}
}
可以修改参数“包装器”的通用范围,Wrapper<? extends T>
以使该方法接受T的子类型,并Wrapper<? super T>
接受超类型。但是,是否有一种方法可以修改MyClass,使其同时接受T的子类型和超类型(而不是任何类型),并且只有一个方法名称?(可能有过载)
我Wrapper<?>
当然可以同意,但是“接受任何东西”与“接受T的类层次结构中的东西”并不相同。我还可以制作2种单独的方法,一种使用<? super T>
,一种使用<? extends T>
,但是这些方法将需要使用不同的名称,因为擦除后的签名是相同的。
注意:出于好奇,请考虑此问题。
您可以尝试以下
<S extends T> void doStuff(Wrapper<? super S> wrapper)
但需要仔细检查是否可以满足您的要求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句