我正在尝试为我的一些 enums
添加默认方法使用 default
的界面方法。该方法应检查是否 enum
在 varargs
的数组( enum
)中值(value)观。
- 我收到的第一个警告是
"Possible heap pollution from parameterized vararg type"
, 但不是enum
的情况,因为它是final
,对吧? - 第二个警告是
"Unchecked cast: BaseEnum<E> to E"
(和"Suspicious call"
警告 witout Actor )。在实现我的接口(interface)时传递正确的类型参数之前,它也是安全的。 这是我的示例代码:
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
功能,但似乎并非如此。有没有更清洁的解决方案?
最佳答案
不需要为这样的操作创建接口(interface)。 EnumSet
类用于此目的:
Fruit fruit = ...;
boolean match = EnumSet.of(Fruit.APPLE, Fruit.CHERRY).contains(fruit);
关于java - 枚举默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67876645/