具有通用返回类型的覆盖方法

alh84001:

假设我有一个超类,它定义了以下抽象方法

public abstract <T extends Interface> Class<T> getMainClass();

现在,如果我想在某些子类中覆盖它

public Class<Implementation> getMainClass(){
    return Implementation.class;
}

我收到有关类型安全和未经检查的转换的警告:

类型安全:返回类型Class<Implementation>getMainClass()从类型SubFoo需要选中转换,以符合Class<Interface>从类型SuperFoo

没有Class<Implementation>下摔倒Class<T>,如果<T extends Interface>有什么方法可以正确消除警告吗?

无可辩驳的:

重写方法的返回类型必须是重写方法的返回类型的子类型。

Class<Impl>不是Class<T>where 的子类型<T extends Interface>T在这里未知。

Class<Impl>Class<? extends Interface>每个子类型化规则的的子类型。


有关通配符的一些子类型化规则:

对于任何X

  • A<X> 是...的子类型 A<? extends X>

  • A<X> 是...的子类型 A<? super X>

如果S是的子类型T

  • A<? extends S> 是...的子类型 A<? extends T>

  • A<? super T> 是...的子类型 A<? super S>

简而言之,(<:表示“是”的子类型)

A<S>    <:    A<? extends S>    <:    A<? extends T>

A<T>    <:    A<?  super  T>    <:    A<?  super  S>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有通用返回类型的覆盖方法,没有警告

具有通用返回类型的零方法

TypeScript:覆盖具有重载的方法返回类型

具有通用返回类型的命令模式

具有通用返回类型的函数

为什么原始类型不能具有带有通用返回类型的方法

具有不同通用参数的C#通用返回类型

Scala通用:具有下限类型的方法的返回数据类型

如何从具有通用返回类型的方法中返回具体类的实例

从接口覆盖通用返回类型

具有通用类型的接口和方法

具有通用返回类型的可空引用类型

具有返回列表的方法的通用接口

如何返回具有通用类型的类实例作为具有通用类型的接口?

PHP:重构具有不同返回类型的覆盖方法的好方法

Spring AOP不适用于具有通用类型返回值的方法

具有多个继承类的通用返回类型的自引用方法

具有通用类类型约束的通用方法

通用方法的通用返回类型

结果类型协方差-具有返回接口类型和特定类型的方法的通用类

添加泛型使您可以覆盖具有其他返回类型的方法吗?

Java泛型-覆盖抽象方法并具有子类的返回类型

如何强制子类覆盖具有更具体返回类型的继承方法

覆盖原始类型的通用方法

如何引用具有多个界限的通用返回类型

具有Springs ResponseEntity的Kotlin和通用返回类型

具有不同返回类型的通用数据服务

返回具有其通用类型的Class实例

返回具有通用类型的接口时出错