Pet*_*ric 30 java generics jsp-tags
我曾经写过这个方法:
private <T> SortedSet<T> createSortedSet() {
return new TreeSet<T>();
}
Run Code Online (Sandbox Code Playgroud)
它应该被称为这样:
Set<String> set = createSortedSet();
Run Code Online (Sandbox Code Playgroud)
这工作正常(虽然我在研究当前的问题时看到了答案,这是容易出错的).
无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中):
private <T> T evaluate(String expression) {
ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator();
return evaluator.evaluate(expression, T, null, pageContext.getVariableResolver());
}
Run Code Online (Sandbox Code Playgroud)
目的是能够将其称为:
Integer width = evaluate(widthStr);
Run Code Online (Sandbox Code Playgroud)
我的evaluate方法中的代码显然不起作用.第二个参数evaluator.evaluate()应该是一个Class对象.这导致我:
如何获得泛型(返回)类型的类?作为评估的第二个参数,我应该用什么来代替T?
Nicolas似乎是对的,它无法完成,我需要将类作为参数传递给我的方法.好处是,因为他的解决方案使参数化参数化在泛型类型上,我得到了对该参数的编译检查.
Nic*_*las 47
不幸的是,您肯定必须将您的方法更改为:
private <T> T evaluate(Class<T> clazz, String expression)
Run Code Online (Sandbox Code Playgroud)
然后传递clazz作为你的第二个参数.没有你想象的那么短.