gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:20 24 4
gpt4 key购买 nike

假设我有一个定义了以下抽象方法的父类(super class)

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

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

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

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

Type safety: The return type Class<Implementation> for getMainClass() from the type SubFoo needs unchecked conversion to conform to Class<Interface> from the type SuperFoo

不是 Class<Implementation>属于Class<T>如果<T extends Interface> ?有什么方法可以正确消除警告吗?

最佳答案

覆盖方法的返回类型必须是被覆盖方法返回类型的子类型。

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

Class<Impl>Class<? extends Interface> 的子类型, 根据子类型化规则。


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

对于任何类型 X

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

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

如果ST 的子类型

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

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

更简洁地说,( <: 表示"is"的子类型)

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

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

关于java - 覆盖具有通用返回类型的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5144896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com