Анд*_*пов 2 java oop enums types interface
我正在尝试为我的一些enums使用default方法的接口添加默认方法。该方法应该检查是否enum在数组(varargs)中enum。
"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
}
Run Code Online (Sandbox Code Playgroud)
有了这个实现,一切看起来都很安全。但是我怎样才能防止这样的事情呢?(“防止”是指一些代码限制)
public enum Transport implements BaseEnum<Fruit> {
CAR, BUS, PLANE
}
Run Code Online (Sandbox Code Playgroud)
我看过新Java 15 sealed功能,但似乎并非如此。有没有更清洁的解决方案?
无需为此类操作创建接口。在EnumSet类用于这个目的:
Fruit fruit = ...;
boolean match = EnumSet.of(Fruit.APPLE, Fruit.CHERRY).contains(fruit);
Run Code Online (Sandbox Code Playgroud)