2017-10-14 190 views
1

所以我覺得我的設計弄得很少, 這就是我得到的。使用反射類方法

我的應用程序需要很多枚舉,每個枚舉包含多個初始化對象和一個「Get Best」方法。

​​

所有枚舉的具有相同getBest,所有應有的場次數, 由於枚舉不能擴展,思想也許界面或許可以幫忙,但如果枚舉實現一個接口,然後每它的情況下只實現不枚舉它。

public abstract class Best { 

public abstract Enum<?> getBest(int num); 
} 

class MyNumberClass extends Best { 
    public abstract Enum<?> getBest(int num){return MyNumberEnum.getBest(num)} 
} 

所以我想也許創建一個類和裏面把枚舉,然後我可以擴展獲取最佳方法。

所以爲了方便使用,我創建了一個HashMap ,然後加入map.put(「編號」,MyNumberClass.class)

但後來我到了一個點,我得到了Class對象, 我怎樣才能使用它的getBest方法?

感謝和抱歉我的愚蠢!

+0

你的意思是你得到了類實例或類型? – nullpointer

+0

@nullpointer 我用 map.put( 「編號」,MyNumberClass.class) 所以我得到MyNumberClass.class我認爲這是 類類型編輯: HashMap中decleration的HashMap <字符串,類<?擴展最佳>> –

+1

這應該會幫助你去https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html...try某些東西,如果它不起作用就回來。 – nullpointer

回答

1

使用DOC: https://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html

我用: 回報(枚舉)enumMap.get(enumName).getDeclaredMethod( 「getBest」,Script.class).invoke(NULL,API);

以爲它是繼承自Best class的思想,而且它是靜態方法。 它可以使用更容易的東西.getBest() Appetintly它不能。

感謝 @nullpointer