背景
我曾经写过这个方法:
private <T> SortedSet<T> createSortedSet() {
return new TreeSet<T>();
}
应该是这样调用的:
Set<String> set = createSortedSet();
这很好用(尽管我在研究当前问题时看到这里的答案很容易出错)。
现状
无论如何,现在我正在编写以下代码(在扩展 javax.servlet.jsp.tagext.TagSupport 的类中):
private <T> T evaluate(String expression) {
ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator();
return evaluator.evaluate(expression, T, null, pageContext.getVariableResolver());
}
目的是为了能够这样称呼:
Integer width = evaluate(widthStr);
我的评估方法中的代码显然不起作用。 evaluator.evaluate()
的第二个参数应该是一个 Class 对象。这导致我:
我的问题
如何获得泛型(返回)类型的 Class?我应该写什么来代替 T 作为评估的第二个参数?
编辑:结论
Nicolas 似乎是对的,这是无法做到的,我需要将类作为参数传递给我的方法。好处是,由于他的解决方案使参数在泛型类型上参数化,我得到了对该参数的编译检查。
最佳答案
很遗憾,您肯定必须将方法更改为:
private <T> T evaluate(Class<T> clazz, String expression)
然后将 clazz
作为第二个参数传递。没有你想象的那么短。
关于Java 泛型 : get class of generic method's return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213972/