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(ClassTrygetMode(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()