当前位置: 首页 > 面试题库 >

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

鞠宏恺
2023-03-14
问题内容

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

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>


 类似资料:
  • 我有一个问题,从抽象类中重写泛型方法。 这是我的抽象类: 当我创建类(B)来实现类(a)时,如下所示: 显示了(getData)方法中的以下编译错误: ”“B。getData“(“字符串函数(字符串)”不是“a”的有效重写。getData'('字符串函数(类型)‘)。dart(无效覆盖) 以及返回语句中的此错误: 类型为“String”的值不能从方法'getData'返回,因为它的返回类型为'St

  • 问题内容: 这就是我想要做的。使用反射,我想获取所有方法及其返回类型(非泛型)。我一直在这样做。但是,当我遇到返回类型未知的方法时,我遇到了限制。 我如何知道方法的返回类型是否通用?我没有奢求在运行时拥有对象。我正在尝试使用Google 或使用抽象类来获取类型信息。我想关联到对象的方法。 有人认为Java不保留通用信息。在这种情况下,为什么第一次强制转换有效而第二次强制转换无效。 任何帮助表示赞赏

  • 我试图用Java中的一个通用返回类型来实现< code >命令模式。 在SO上查看了这个答案后,我创建了一个类(接口),如下所示: 然而,Eclipse一直抱怨: SearchResultsPage 类型的方法 execute(ArrayList, T) 必须重写或实现超类型方法 但当我点击 在超类型命令中创建 execute() Eclipse自动生成方法<code>T execute(Arra

  • 问题内容: 我偶然发现了对Java继承的好奇心,我希望您对此提出更好的想法: 假设两个接口A和A1 接口A1扩展了A 接口A具有返回泛型类型的方法。 通用类型将是。 现在的基本思想是将这种通用返回类型从接口A中更改 为 接口A1中的 一开始似乎很容易(不好的事情会在以后出现) 我们将接口A声明为 和接口A1一样 如您所见,我们被迫编写接口A本身,以允许使用基于泛型的“子类”覆盖它。(实际上,gen

  • 我在覆盖接口中声明的方法时遇到了一些问题,该方法使用泛型参数作为其异常,并使用泛型作为其参数之一。为了说明,我编写了以下代码接口 通过javac运行,我得到 请注意,在接口中,metodoA和metodoB之间的唯一区别在于它们的参数。 为什么Implementadora(Implementadora)的metodoB(metodoB)(代码)不重写Interfaz(代码),但重写metodoB(

  • 问题内容: 我无法解释为什么这个简单的代码无法编译。 错误是:。 为什么不?定义为或其子类。 更新:我在Java教程中找到了关于泛型方法的简短建议。 通用方法允许使用类型参数来表示方法的一个或多个参数的类型和/或其返回类型之间的依赖性。如果没有这种依赖性,则不应使用通用方法。 我的解释是,通用方法仅适用于两种情况。 方法的两个(或多个)参数类型之间存在依赖关系。 方法的返回类型与其一个(或多个)参