小编Nic*_*ery的帖子

Java自动返回类型协方差与泛型子类

我有两个看起来像这样的接口:

interface Parent<T extends Number> {
    T foo();
}

interface Child<T extends Integer> extends Parent<T> {
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个原始Parent对象,则调用foo()默认值返回a,Number因为没有类型参数.

Parent parent = getRawParent();
Number result = parent.foo(); // the compiler knows this returns a Number
Run Code Online (Sandbox Code Playgroud)

这是有道理的.

如果我有一个原始Child对象,我希望调用foo()将返回一个Integer相同的逻辑.但是,编译器声称它返回一个Number.

Child child = getRawChild();
Integer result = child.foo(); // compiler error; foo() returns a Number, not an Integer
Run Code Online (Sandbox Code Playgroud)

我可以覆盖Parent.foo()Child解决这个问题,就像这样:

interface Child<T extends Integer> extends Parent<T> { …
Run Code Online (Sandbox Code Playgroud)

java generics polymorphism subclass covariance

12
推荐指数
1
解决办法
483
查看次数

标签 统计

covariance ×1

generics ×1

java ×1

polymorphism ×1

subclass ×1