gpt4 book ai didi

Java 泛型和 SuppressWarnings

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:42 29 4
gpt4 key购买 nike

我有课

abstract class A {
//....
}

class B extends A {
//....
}

class C extends A {
//....
}

然后我有

interface Maker<T extends A> {
SomeClass make(T obj);
}

Maker 类的实现

class MakerForB implements Maker<B> { /*... */ }
class MakerForC implements Maker<C> { /*... */ }

和类工厂有一个静态方法

class Factory {
public static SomeClass makeSomeClass(A obj) {
Maker maker = null;
if(obj instanceof B) maker = new MakerForB();
/* ... */
return maker.make(obj);
}
}

在那种情况下,当我以这种方式声明 Maker 时,我会收到 Maker 是原始类型的警告

Maker<?> maker = null;

我得到异常(make 不适用于参数 A)

return maker.make(obj);

使用

消除这些警告的最佳方法是什么
@SuppressWarnings("unchecked")

最佳答案

摆脱 Maker 上的所有泛型 - 你不需要它:

interface Maker {
SomeClass make(A obj);
}

class MakerForB implements Maker {
SomeClass make(A obj);
}

或者,如果您仍想使用它,请使用不安全的转换或使用 SuppressWarnings

要了解如果您尝试定义会出错的原因:

Maker<? extends A> maker = null;

想象一下当您(偶然)获得 maker = new MakerForC() 并尝试将其应用于 B 时的情况。

关于Java 泛型和 SuppressWarnings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2056502/

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