【发布时间】:2021-08-24 20:01:37
【问题描述】:
我正在尝试使用带有default 方法的接口为我的一些enums 添加默认方法。该方法应检查enum 是否在enum 值的数组(varargs) 中。
- 我收到的第一个警告是
"Possible heap pollution from parameterized vararg type",但不是enum,因为它是final,对吧? - 第二个警告是
"Unchecked cast: BaseEnum<E> to E"(和"Suspicious call"警告没有演员表)。在实现接口时传递正确的类型参数之前,它也是安全的。 这是我的示例代码:
public interface BaseEnum<E extends Enum<E>> {
@SuppressWarnings("unchecked")
default boolean in(E ... statuses){
return Arrays.asList(statuses)
.contains((E) this);
}
}
public enum Transport implements BaseEnum<Transport> {
CAR, BUS, PLANE
}
public enum Fruit implements BaseEnum<Fruit> {
APPLE, CHERRY, LEMON
}
有了这个实现,一切看起来都很安全。但是我怎样才能防止这样的事情呢?(“防止”是指一些代码限制)
public enum Transport implements BaseEnum<Fruit> {
CAR, BUS, PLANE
}
我查看了新的 Java 15 sealed 功能,但似乎并非如此。有没有更清洁的解决方案?
【问题讨论】:
-
不可能
标签: java oop types enums interface