理论上,子类方法中的输入参数应该等于或小于父类(super class)的输入参数(逆变)。
我想做的基本上是创建一个类 A
具有通用绑定(bind) <T extends SomeType>
,然后创建一个子类 B
,没有通用绑定(bind)(应该允许任何类型)<T>
:
class A<T extends SomeType> {....}
class B<T> extends A<T extends SomeType> { ..... }
这在 Java 中是否可能,或者从理论的角度来看是否正确?
最佳答案
不,这是不正确的。考虑在 A
中声明的返回 T
的方法:
abstract class A<T extends SomeType> {
abstract T foo();
}
静态类型为 A
的对象应符合该类声明的边界:
A<?> a = ...;
SomeType someObject = a.foo();
但是如果B
消除了这些界限:
abstract class B<T> extends A<T> { }
class C extends B<String> {
@Override
String foo() {
return "foo";
}
}
我们遇到了困惑:
A<?> a = new C();
SomeType someObject = a.foo(); // ???
关于java - 扩展泛型类但削弱子类中的泛型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372624/