java - 枚举默认方法

标签 java oop types enums interface

我正在尝试为我的一些 enums 添加默认方法使用 default 的界面方法。该方法应检查是否 enumvarargs 的数组( enum )中值(value)观。

  1. 我收到的第一个警告是 "Possible heap pollution from parameterized vararg type" , 但不是 enum 的情况,因为它是 final ,对吧?
  2. 第二个警告是 "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/

相关文章:

java - 你的 Java 'rules' 是什么?

java - 具有新功能的向后兼容框架

oop - 方法和函数有什么区别?

vector - Rust中的Vec <(i64,i64)>数据类型是什么?

java - 调用init方法失败;嵌套异常是 java.lang.IllegalArgumentException : The namespace property is required

java - 如何获取JAVA中所有被调用的方法

PHP & MySQL : confusion following code to determine new object's properties

Haskell类型的具体数据构造函数

javascript - 如何将 int 转换为 float?

java - 自动连线注释在自定义推土机转换器内不起作用