Java @抑制最终类型参数的警告
在某个地方,我有一个通用的“VT扩展字符串”方法。显然,这会产生一个警告:类型参数VT不应该被最终的类型字符串限制。不能进一步扩展最终类型 你知道有没有办法抑制这个警告(Eclipse)?如果你想知道我是怎么做到的: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
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;}
}