Java 泛型 : get class of generic method's return type

标签 java generics jsp-tags

背景

我曾经写过这个方法:

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/

相关文章:

javascript - 如何在导入JSP中获取主机协议(protocol)

java - fedora 21 javafx 没有创建媒体播放器

java - 是否有更高效的 Java 8 Stream 方法来查找 int[] 中的索引?

java - 扩展集合泛型类的泛型类

c# - 抽象类实例化

java - HQL 或 SQL 查询从许多相关实体获取数据

java - 如何使用JPA/hibernate EntityManager和EJB3.0实现泛型?

java - Apache Tomcat :Path Error

java - Tomcat7 WEB-INF/lib 目录不起作用

java - JSTL if 标签始终执行为 true