枚举默认方法

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

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

回答

无需为此类操作创建接口。在EnumSet类用于这个目的:

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


以上是枚举默认方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>