为什么我必须在下面的代码中显式地将命令转换为C? 命令实现Runnable和Describable。如何在使用两个接口声明泛型类型参数时避免不必要的强制转换
@Test
public <C extends Runnable & Describable> void testMapOfCommands() throws Exception
{
Map<String, C> commands = Maps.newHashMap();
for(Commands command : Commands.values())
{
commands.put(command.name(), (C) command);
}
//Use commands here (not relevant to my question):
//CommandLineParser.withCommands(commands).parse("commit");
}
private enum Commands implements Runnable, Describable
{
commit
{
@Override
public void run()
{
System.out.println("COMMIT");
}
@Override
public String description()
{
return "Commits something";
}
};
}
一个解决办法我心目中是介绍的ICommand扩展双方的Runnable和可描述的:
public interface ICommand extends Runnable, Describable{}
,但我想避免引入一个新的类型时,已经有两种类型随时可用,我已经有了一个更复杂一点的Command类。我在这里抓秸秆吗?
他们是接口 – jontejj 2013-04-23 22:03:56
首先,请发布整个班级。其次,你需要使用实现,而不是扩展,像Runnable这样的接口。 – Antimony 2013-04-23 22:04:39
更新了一下代码,我认为所有相关代码都已发布。你错过了哪些部分? – jontejj 2013-04-23 22:07:09