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