gpt4 book ai didi

java - @SuppressWarnings 用于最终类型参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:01 24 4
gpt4 key购买 nike

在某个地方,我有一个带有通用“VT extends String”的方法。显然这会产生一个警告:类型参数 VT 不应受最终类型 String 的限制。 Final 类型无法进一步扩展

您知道是否有办法抑制此警告 (Eclipse)?如果你想知道我是怎么得到这个的:

import java.util.ArrayList;
import java.util.List;

class A<T> {
T value;
B<? super T> b;

void method() {
b.method(value,new ArrayList<T>());
}}

interface B<X> {
<VT extends X> VT method(VT p, List<VT> lst);
}

// works fine
class C implements B<Number> {
public <VT extends Number> VT method(final VT p, final List<VT> lst) {
return p;
}}

// causes warning
class D implements B<String> {
public <VT extends String> VT method(final VT p, final List<VT> lst) {
return p;
}}

// error: The type E must implement the inherited abstract method B<String>.method(VT, List<VT>)
class E implements B<String> {
@SuppressWarnings("unchecked")
public String method(final String p, final List<String> lst) {
return p;
}}

最佳答案

您的代码无法编译,但这里有一些类似的东西,我认为这就是您想要的:

class A<T>{
T value;
B<? super T> b;
void method(){
b.method(value);
}
}
interface B<X>{
<VT extends X> VT method(VT p);
}
// works fine
class C implements B<Number>{
public <VT extends Number> VT method(VT p){return p;}
}
// causes warning
class D implements B<String>{
public <VT extends String> VT method(VT p){return p;}
}

看到您没有选择在这里说 extends String ,我会说这是 Eclipse 中的一个错误。此外,Eclipse 通常可以建议适当的 SuppressWarnings,但这里没有。 (另一个错误?)

您可以做的是将返回和参数类型更改为 String,然后抑制它导致的(不相关的)类型安全警告:

// no warnings
class D implements B<String>{
@SuppressWarnings("unchecked")
public String method(String p){return p;}
}

关于java - @SuppressWarnings 用于最终类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3957121/

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