Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @抑制最终类型参数的警告_Java_Eclipse_Generics_Suppress Warnings - Fatal编程技术网

Java @抑制最终类型参数的警告

Java @抑制最终类型参数的警告,java,eclipse,generics,suppress-warnings,Java,Eclipse,Generics,Suppress Warnings,在某个地方,我有一个通用的“VT扩展字符串”方法。显然,这会产生一个警告:类型参数VT不应该被最终的类型字符串限制。不能进一步扩展最终类型 你知道有没有办法抑制这个警告(Eclipse)?如果你想知道我是怎么做到的: import java.util.ArrayList; import java.util.List; class A<T> { T value; B<? super T> b; void method() { b.method(value,new

在某个地方,我有一个通用的“VT扩展字符串”方法。显然,这会产生一个警告:类型参数VT不应该被最终的类型字符串限制。不能进一步扩展最终类型

你知道有没有办法抑制这个警告(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;
}}
import java.util.ArrayList;
导入java.util.List;
甲级{
T值;

B您的代码没有编译,但这里有一些类似的东西,我假设这就是您想要的:

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

很抱歉没有编译。我只是从我的代码中快速调整了它。B、C、D中的返回类型应该是空的,但这不会影响我的情况。您的解决方案很有趣,我会使用它,但它似乎不起作用。如果我这样做,我会得到错误:“D不实现方法”。似乎这样的方法没有相同的签名。实际上它编译得很好。我在解释我的代码时不好。我有两个参数用于该方法。当它失败时。你能更新原始问题中的代码,使其编译和工作与你的情况一样吗?不过,
B.method
的类型参数在这里是没有意义的(仅当您希望返回与参数相同类型的值时才有意义)。您可以说
void-method(X)
B
中。如果您控制该代码,我建议您将类型参数删除到
方法
,而不是执行奇怪的警告抑制。好的,看看pastebin代码,我建议您提供
方法
签名
无效方法(X X,listIntellij!我想消除警告的唯一方法是
@SuppressWarnings(“all”)
// no warnings
class D implements B<String>{
    @SuppressWarnings("unchecked")
    public String method(String p){return p;}
}