假设我有一个超类,它定义了以下抽象方法
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教程中找到了关于泛型方法的简短建议。 通用方法允许使用类型参数来表示方法的一个或多个参数的类型和/或其返回类型之间的依赖性。如果没有这种依赖性,则不应使用通用方法。 我的解释是,通用方法仅适用于两种情况。 方法的两个(或多个)参数类型之间存在依赖关系。 方法的返回类型与其一个(或多个)参