我想使用一个简单实现的 tld 函数,MyAccessManager 是一个抽象类,并且有 2 个子类以不同的方式重写函数:
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)}"/>
我将正确的参数(即子类实例作为 param1)传递给我的 tld 函数,但 webapp 抛出以下异常:
org.apache.jasper.JasperException:PWC6300:找不到 TLD 中函数 mytaglib:isAllowed 的方法签名中指定的类 T。
我的顶级域名文件:
<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 的类型参数吗?或者说有什么办法可以实现这样的功能吗?
最佳答案
我根本不明白为什么你需要T
。
这是多态性的典型案例,这里不需要类型参数和其他通用的东西:
public static boolean isAllowed(MyAccessManager accessMan, MyTypeEnum otherUsersEnum){ ... }
.
<function-signature>boolean isAllowed(MyAccessManager,com.myproj.MyTypeEnum)</function-signature>
关于java - 在 TLD 函数中使用类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11879304/