假设我有一个类和一个方法,如下所示:
class MyClass<T> {
void doStuff(Wrapper<T> wrapper) {
//impl.
}
}
参数“wrapper”的通用范围可以修改为Wrapper<? extends T>
使该方法接受 T 的子类型,并且 Wrapper<? super T>
接受 super 类型。但是,有没有一种方法可以修改 MyClass,使其接受 T 的子类型和父类(super class)型(不是任何类型),并且只有一个方法名称? (可能存在过载)
我可以简单地选择 Wrapper<?>
当然,但是“接受任何内容”与“接受 T 的类层次结构中的某些内容”不同。我还可以制作两种单独的方法,一种是 <? super T>
和一个带有 <? extends T>
,但是这些方法需要不同的名称,因为删除后签名是相同的。
注意:请出于好奇考虑这个问题。
最佳答案
您可以尝试以下方法
<S extends T> void doStuff(Wrapper<? super S> wrapper)
但需要仔细检查这是否满足您的要求。
关于Java 泛型,一种强制执行父类(super class)型或子类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65395612/