枚举默认方法



我正试图使用带有default方法的接口为我的一些enums添加一个默认方法。该方法应检查enum是否在enum值的数组(varargs(中。

  1. 我得到的第一个警告是"Possible heap pollution from parameterized vararg type",但不是在enum的情况下,因为它是final,对吧
  2. 第二个警告是"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 15sealed功能,但似乎不是这样。有更清洁的解决方案吗?

没有必要为这样的操作创建接口。EnumSet类用于此目的:

Fruit fruit = ...;
boolean match = EnumSet.of(Fruit.APPLE, Fruit.CHERRY).contains(fruit);

相关内容

  • 没有找到相关文章

最新更新