Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否将Enum.class作为参数传递?_Java_Enums_Parameterized - Fatal编程技术网

Java 是否将Enum.class作为参数传递?

Java 是否将Enum.class作为参数传递?,java,enums,parameterized,Java,Enums,Parameterized,我有一个接口Moded。这些方法是getMode(),setMode(枚举模式) 它还有一个方法getMode(Object key),当实现类有多种模式时(例如打开/关闭是一种状态,但命令模式/查询模式/其他模式是另一种状态,即模式的“2维”),该方法用于识别实现类中的“模式类型” 然后,实现类将使用enum来提供每个模式类型的可能值 其思想是向getMode(objectkey)传递一个键,实现类使用该键来标识模式类型以查找的值。但是为了更好地实现这一点,如果您总是必须使用Enum类对象作为

我有一个接口
Moded
。这些方法是
getMode()
setMode(枚举模式)

它还有一个方法
getMode(Object key)
,当实现类有多种模式时(例如打开/关闭是一种状态,但命令模式/查询模式/其他模式是另一种状态,即模式的“2维”),该方法用于识别实现类中的“模式类型”

然后,实现类将使用
enum
来提供每个模式类型的可能值


其思想是向
getMode(objectkey)
传递一个键,实现类使用该键来标识模式类型以查找的值。但是为了更好地实现这一点,如果您总是必须使用
Enum
类对象作为键,这将是一个理想的选择。无论如何,您都可以这样做,但为了实现这一点,我尝试更改为
getMode(ClassTry
getMode(Class),要允许调用方将返回值分配给给定类型的变量,您需要用模板参数替换通配符

例如,如果您想支持此呼叫:

MANAGER\u MODE=indexManager.getMode(MANAGER\u MODE.class);
那么您的方法需要如下所示:

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;
    }
    ...
@SuppressWarnings(“未选中”)
公共T getMode(类密钥){
if(key==MANAGER\u MODE.class)
return(T)managerMode;
抛出新的IllegalArgumentException(“未知模式类型:+key.getName());
}

先生/女士,您是一位参数化天才。我向您脱帽致敬。实际上,我正在使用
getMode(Class>key)
来避免关于“原始类型”的信息@MikCorevent要了解这一点的解释,请参见。@VGR Tx-将研究-我以前可能读过这方面的内容,但这种不太常见的参数化东西往往会一耳进一耳出。实际上,我可以问一下你关于这一点的问题,因为我已经尝试过使用它。这种模式不意味着
模式已经过时了吗必须参数化:
moded这不是我已经做过的吗?显示如何实现
getMode()
?不需要未选中的操作。您可以使用
return key.cast(managerMode);
indexManager.getMode( IndexManager.MANAGER_MODE.class )
String.format( "extends Enum? %s", Enum.class.isAssignableFrom( IndexManager.INDEX_MANAGER_MODE.class ))
<T extends Enum<T>> T getMode(Class<T> key ) 
<T extends Enum<T>> T getMode()