0
我想用這簡直是實現了一個頂級域名的功能,MyAccessManager是一個抽象類,有2名兒童不同重載函數:在TLD功能使用類型參數
public static <T extends MyAccessManager> boolean isAllowed(T accessMan, MyTypeEnum otherUsersEnum){
// trivial implementation
}
我上面的方法也定義在我的TLD定義文件(* .tld)。
我有2類延伸我MyAccessManager,我通過EL使用功能,如:
<input name="foo" type="hidden" value="${mytaglib:isAllowed(param1, param2)}"/>
我通過正確的參數(即兒童類的實例作爲參數1)我的TLD的功能,但web應用程序拋出異常如下:
org.apache.jasper.JasperException:PWC6300:無法找到TLD中函數mytaglib:isAllowed的方法簽名中指定的類T.牛逼
我的TLD文件:
<function>
<description>Processes users access to specific resources</description>
<name>isAllowed</name>
<function-class>com.myproj.MyUtil</function-class>
<function-signature>boolean isAllowed(T,com.myproj.MyTypeEnum)</function-signature>
</function>
是否TLD不支持Java的類型參數?或者,有什麼方法可以實現這樣的功能?
這就產生錯誤也確實這種做法是我第一次嘗試。 java.lang.ClassCastException異常。它不能投我的子類其父古怪.. – px5x2 2012-08-09 10:17:51
我的壞,我有2個獨立的AccessManager。我將它轉換爲正確的,但我仍然不知道,這種用法在上面我的帖子是否是可能的。 – px5x2 2012-08-09 10:22:35
我想這是不可能的,因爲類型擦除,所以,你必須在TLD使用的簽名的擦除版本。但實際上它沒有什麼意義。 – axtavt 2012-08-09 10:24:19