gpt4 book ai didi

Java 泛型未经检查的覆盖

转载 作者:行者123 更新时间:2023-12-01 18:30:12 25 4
gpt4 key购买 nike

当使用具有具体类型(满足泛型类型)的方法实现具有泛型类型的接口(interface)方法时,会发生未经检查的覆盖警告。

这里是一个示例代码:

interface SomeType{}

class Impl1 implements SomeType{}

interface SomeInterface{
<T extends SomeType> T justDoIt();
}

class SomeInterfaceImpl implements SomeInterface{
public Impl1 /*here i get the warning*/ justDoIt(){
return null;
}
}

警告说:返回类型需要未经检查的转换...任何人都可以解释这一点。我知道类型删除,但这可以在编译时验证,不存在未经检查的强制转换。

重要的问题。实现这一点的正确方法是什么?鉴于我希望能够实现 SomeInterface 但提供具体类型的编译时类型安全(不使用 SomeType 而是具体的 SomeType 后代)?

更新:这就是我想做的

interface SomeType{

}

class Impl1 implements SomeType{

}

interface SomeInterface{
SomeType convert(String param);
String convert(SomeType param);
}

class SomeInterfaceImpl implements SomeInterface{
public Impl1 justDoIt(){
return null;
}

@Override
public Impl1 convert(String param) {
return null;
}

@Override
public String convert(Impl1/*compile error right here*/ param) {
return null;
}
}

我希望现在我的初衷已经明确了。我需要为转换器提供通用接口(interface)...

最佳答案

您需要一个泛型类型,而不是泛型方法:

interface SomeType {
}

class Impl1 implements SomeType {
}

interface SomeInterface<T extends SomeType> {
T convert(String param);
String convert(T param);
}

class SomeInterfaceImpl implements SomeInterface<Impl1> {
@Override
public Impl1 convert(String param) {
return null;
}

@Override
public String convert(Impl1 param) {
return null;
}
}

尽管如此,您应该问问自己,在您的特殊情况下以这种方式使用泛型是否有意义! SomeInterfaceImpl 的实例只能分配给 SomeInterface<Impl1> 类型的字段:

SomeInterface<Impl1> impl1 = new SomeInterfaceImpl();

您不能将其分配给例如SomeInterface<SomeType> 类型的变量:

SomeInterface<SomeType> doesntWork = new SomeInterfaceImpl(); // compile error

这意味着,您的代码与 SomeInterface<Impl1> 相关联。任何你想使用你的实现的地方。如果可以的话,就去吧。

关于Java 泛型未经检查的覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536254/

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