java - 将 Enum.class 作为参数传递?

标签 java enums parameterized

我有一个接口(interface) Moded .这些方法是 getMode() , setMode( Enum<?> mode ) .

它还有一个方法getMode( Object key ) ,用于在类具有多种模式时识别实现类时的“模式类型”(例如,OPEN/CLOSED 是一种状态,但 COMMAND_MODE/QUERY_MODE/OTHER_MODE 是另一种状态,即模式的“二维”)。

然后实现类将使用 enums提供每种模式类型的可能值。

想法是getMode( Object key )传递了一个键,实现类使用该键来标识要查找其值的模式类型。但是为了使它更好,如果你总是必须使用 Enum 将是理想的。类对象作为键。无论如何你都可以这样做,但为了强制执行它,我尝试更改为 getMode( Class<Enum<?>> key ) .

出于某种原因,假设我有一个类 IndexManager实现Moded , 它包含一个 enum像这样:

enum MANAGER_MODE {
    COMMAND_MODE, QUERY_MODE, OTHER_MODE
}

我实现的方法看起来像这样:

@Override
public Enum<?> getMode(Class<Enum<?>> key ) throws Exception {

    if( key.equals( IndexManager.MANAGER_MODE.class )){
        return managerMode;
    }
    ...

...然后我试试这个:

indexManager.getMode( IndexManager.MANAGER_MODE.class )

我在 Eclipse 中收到消息

The method getMode(Class<Enum<?>>) in the type IndexManager is not applicable for the arguments (Class<IndexManager.MANAGER_MODE>)

然而这说“真”:

String.format( "extends Enum? %s", Enum.class.isAssignableFrom( IndexManager.INDEX_MANAGER_MODE.class ))

稍后

事实上,Andreas 的回答更好(没有强制转换;如果需要,类型安全)。使用他的方法,你把

<T extends Enum<T>> T getMode(Class<T> key ) 

允许实现多模式类

<T extends Enum<T>> T getMode()

允许实现单模式类

最佳答案

尝试 getMode(Class<? extends Enum> key)相反。

关于java - 将 Enum.class 作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41641596/

相关文章:

java - Preon 枚举解释和映射

c# - 在 C# 中的方法中定义枚举?

java - 为什么任何类型都可以EXTENDS接口(interface)?

sql-injection - 参数化的 SQL 列?

java - 检查该方法是否已使用该输入执行的方法

java - 将 TextView 与数组列表链接并在事件发生时更改文本

java - 如何检查数据库中枚举的无效数据

hudson - 在 Jenkins 中检索下游构建的构建号或工件

java - 将十六进制值转换为时间戳/日期和时间

java - NanoHTTPD 无法处理 POST 参数