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作为你的第二个参数。 没有你想象的那么短。