当前位置: 首页 > 面试题库 >

@SuppressWarnings用于最终类型参数

秦宁
2023-03-14
问题内容

大家好。在某个地方,我有一个带有通用“ VT扩展字符串”的方法。显然,这会产生警告: 类型参数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;
}}

谢谢!克里斯蒂安


问题答案:

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

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,但这里没有。(另一个错误?)

您可以做的是将return和arguments类型更改为String,然后取消它引起的(无关)类型安全警告:

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


 类似资料:
  • 我写JUnit测试有困难。问题是在下面的代码块中有最后一个方法: 是一个,它扩展了,后者是一个抽象类。 是中的最后一个方法。 这是我的Test类的浓缩版本: 我使用PowerMockito,因为我知道Mockito不能存根final方法。 我得到的错误是 在区域设置“EN_US”的代码“CONSTANT_STRING”下找不到消息。 看起来我的...实际上并没有被用作正在被调用。我尝试将添加到我创

  • 问题内容: 在Java中,要使函数返回一个与参数类型相同的对象并扩展某个类,我将输入: 是否有与此等效的C ++? 换句话说,我如何使一个函数接受任何扩展了某个类并返回相同类型的类?(这是为了抽象/纯虚拟类的目的)。 问题答案: 如果您有C ++ 11或更高版本,我们可以在这里使用 例如: 现场演示

  • 我试图在一个测试中模拟。我在网上找到了一些人们也这么做的例子。 一个例子来自sping-data-elasticsearch,另一个来自一些教程。 这是我自己的例子。 不幸的是,我看到了一些警告。以下是我得到的: 网络客户。RequestHeaderUrispec是原始类型。对泛型类型WebClient的引用。RequestHeaderUrispec应该参数化 当我更改代码并向添加通配符时,我会收

  • 1.1.1. 终端类型 1.1.1. 终端类型 目前支持的终端类型以及定义: 注意:智能场景也可以通过终端类型来表示 类型 描述 atomizedGlass "玻璃雾化器" heater "取暖器" airer "晾衣架" alarm "报警器" waterDetector "水质检测器" feeder "喂食器" windowPusher "推窗器" ventilation "新风" stb "

  • 我已经声明了这样一个活动 谢谢您的关注

  • 我试着写一个小函数,它接受两个列表,并根据另一个列表的元素对一个进行排序。所以类似于: 将产生一个排序列表。 然而,可能是一个不同的列表,比如整数、浮点数或其他列表。理想情况下,我希望我的程序能够获取我抛出的任何列表,根据