@SuppressWarnings表示最终类型参数

时间:2010-10-18 07:03:47

标签: java eclipse generics suppress-warnings

嘿伙计们。 在一个地方,我有一个带有通用“VT extends String”的方法。显然这会产生一个警告:类型参数VT不应该受最终类型String的限制。最终类型无法进一步扩展。 你知道是否有办法压制这个警告(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;
}}

谢谢! 克里斯蒂安

1 个答案:

答案 0 :(得分:2)

你的代码没有编译,但这里有类似的东西,我认为是你想要的:

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;}
}