爲什麼我必須在下面的代碼中顯式地將命令轉換爲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