当前位置: 首页 > 面试题库 >

Java泛型:获取泛型方法的返回类型的类

端木弘方
2023-03-14
问题内容

背景

我曾经写过这种方法:

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对象。这导致我:

我的问题

如何获得通用(返回)类型的类?我应该写些什么代替T作为要评估的第二个参数?

编辑:结论

Nicolas似乎是对的,无法完成,我需要将类作为参数传递给我的方法。好处是,由于他的解决方案使参数在通用类型上参数化,因此我对该参数进行了编译检查。


问题答案:

不幸的是,您肯定必须将方法更改为:

private <T> T evaluate(Class<T> clazz, String expression)

然后clazz作为第二个参数传递 不像您预期​​的那么短。



 类似资料:
  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • Java中是否有一种方法可以通过一个方法的声明返回不同的类型? 我希望此方法返回一个对象,并在函数调用时将其转换为正确的类型。这就是我的想法,但它不是这样工作的。我是否需要某种通用返回类型来执行此操作?解决这个问题的最佳方法是什么?

  • 问题内容: 如果在Java中创建泛型类(该类具有泛型类型参数),则可以使用泛型方法(该方法带有泛型类型参数)吗? 考虑以下示例: 正如您对通用方法所期望的那样,我可以使用任何对象调用的实例: 但是,如果我尝试使用 不 指定泛型类型的实例,则无论传入什么,我都会调用返回, 奇怪的是,如果返回类型是通用类,它将编译(例如(实际上,这可以解释-参见下面的答案)): 此外,如果输入通用类,即使仅使用通配符

  • 如果在Java中创建泛型类(该类具有泛型类型参数),是否可以使用泛型方法(该方法采用泛型类型参数)? 考虑下面的例子: 正如您所期望的那样,对于任何对象,的实例,我都可以调用: 但是,如果我试图使用的实例而不指定泛型类型,那么调用将返回一个

  • 我在我的Java程序中写了这个函数: 这就是我所说的: 它是有效的,但我觉得我应该能够省略第一个参数,并从返回类型(结果被分配到的类型)推断出它。这可能吗?如果是,语法是什么?

  • 问题内容: 我有一个列表,程序是这样的:。有什么方法可以使用T变量获取类的名称(因此我可以从内部知道T是否为String,Socket等)? 编辑:没关系,在这里找到了答案。 问题答案: 简短答案 :您不能。 长答案 : 由于使用Java实现泛型的方式,泛型T在运行时不会保留。您仍然可以使用私有数据成员: 用法示例: