我正试图使用带有default
方法的接口为我的一些enums
添加一个默认方法。该方法应检查enum
是否在enum
值的数组(varargs
(中。
- 我得到的第一个警告是
"Possible heap pollution from parameterized vararg type"
,但不是在enum
的情况下,因为它是final
,对吧 - 第二个警告是
"Unchecked cast: BaseEnum<E> to E"
(和"Suspicious call"
警告,不带cast(。在实现接口时传递正确的类型参数之前,它也是安全的。以下是我的示例代码:
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
功能,但似乎不是这样。有更清洁的解决方案吗?
没有必要为这样的操作创建接口。EnumSet
类用于此目的:
Fruit fruit = ...;
boolean match = EnumSet.of(Fruit.APPLE, Fruit.CHERRY).contains(fruit);