相关疑难解决方法(0)

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

背景

我曾经写过这个方法:

private <T> SortedSet<T> createSortedSet() {
  return new TreeSet<T>();
}
Run Code Online (Sandbox Code Playgroud)

它应该被称为这样:

Set<String> set = createSortedSet();
Run Code Online (Sandbox Code Playgroud)

这工作正常(虽然我在研究当前的问题时看到了答案,这是容易出错的).

目前的情况

无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中):

private <T> T evaluate(String expression) {
  ExpressionEvaluator evaluator = pageContext.getExpressionEvaluator();
  return evaluator.evaluate(expression, T, null, pageContext.getVariableResolver());
}
Run Code Online (Sandbox Code Playgroud)

目的是能够将其称为:

Integer width = evaluate(widthStr);
Run Code Online (Sandbox Code Playgroud)

我的evaluate方法中的代码显然不起作用.第二个参数evaluator.evaluate()应该是一个Class对象.这导致我:

我的问题

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

编辑:结论

Nicolas似乎是对的,它无法完成,我需要将类作为参数传递给我的方法.好处是,因为他的解决方案使参数化参数化在泛型类型上,我得到了对该参数的编译检查.

java generics jsp-tags

30
推荐指数
1
解决办法
3万
查看次数

Class Generics的类型不匹配

我有以下不能编译的代码,虽然有一种方法可以使它编译,我想了解它为什么不编译.有人可以告诉我具体为什么我收到错误信息,我会在最后发布吗?

public class Test {
    public static void main(String args[]) {
        Test t = new Test();
        t.testT(null);
    }

    public <T extends Test> void testT(Class<T> type) {
        Class<T> testType = type == null ? Test.class : type; //Error here
        System.out.println(testType);
    }
}
Run Code Online (Sandbox Code Playgroud)

Type mismatch: cannot convert from Class<capture#1-of ? extends Test> to Class<T>

通过投射Test.classClass<T>这个编译与Unchecked cast警告并完美运行.

java generics

20
推荐指数
1
解决办法
4万
查看次数

标签 统计

generics ×2

java ×2

jsp-tags ×1