在 Java 中使用 Enum 的泛型

2022-09-03 05:16:28

我有一个枚举

public enum Days {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY 

}

我想创建一个可以采用 Days 类型的值的类。所以我使用了Java泛型

public class State<T extend Days>

但是有一个错误

The type parameter T should not be bounded by the final type Days. 
Final types cannot be further extended

如何解决此问题?


答案 1

枚举是最终类型,这意味着,您无法从它们扩展

一个泛型喜欢想要一个类作为参数,它是Days或扩展类,但扩展类是不可能的

因此,唯一可能的参数是 Days,如果只有一个值可能,则不需要泛型


答案 2

不要使用泛型绑定。没有必要。只需使用无界类型,如下所示:

public class State<T> {
    public State(T startState) {
        // whatever
    } 
}

并使用它:

State<Days> dayState = new State<Days>(Days.SUNDAY);

这是一个不需要绑定的简单类型化类。

唯一可能有意义的绑定是绑定到 :enum

public class State<T extends Enum<T>> {
    public State(T startState) {
        // whatever
    } 
} 

此版本要求泛型参数为 .对于此版本,上面的用法示例仍将编译,但这不会编译(例如):enum

State<String> dayState = new State<String>("hello");

因为 不是 .Stringenum