我想通過反射下面的方法來打電話,但我有問題指定正確的簽名:泛型列表和反思
public void executeRule(List<Node> params, SomethingStrangeFound callMeBack) throws IOException
{
...
}
我想是這樣的:
Class partypes[] = new Class[2];
partypes[0] = Class.forName("java.util.List");
partypes[1] = Class.forName("vp.SomethingStrangeFound");
Method meth = cls.getMethod("executeRule", partypes);
它不起作用,因爲我使用「java.util.List」時,它必須是「列表<節點>」,但我不知道如何指定它。
如果我只是用 「java.util.List的」,我有以下錯誤調用cls.getMethod( 「executeRule」,partypes):
NoSuchMethodException: vp.RuleWebXmlContextParamFacesPortletRenderStyles.executeRule(java.util.List, vp.SomethingStrangeFound)
任何幫助嗎?
P.S. 在調試的時候,我看到 「列出<節點>」 與解決: (Ljava/UTIL /列表< Lorg/W3C/DOM /節點; >;點亮/ VP/SomethingStrangeFound;)V
,但它不幫不了我。
在運行時,由於類型擦除,它將成爲'java.util.List',所以它一定不是問題。 – 2013-05-14 16:31:40
''partypes''數組的長度應該等於1,你也可以簡化你的代碼到'Class partypes [] = new Class [] {List.class};' – hoaz 2013-05-14 16:34:12
@Luiggi它給我帶來一個問題,因爲當我調用getMethod 「executeRule」,partypes)我收到一個異常:NoSuchMethodException,因爲類型不同。 – 2013-05-14 16:43:03