有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

泛型如何使用java反射获取类型参数值?

interface Foo<T> { ... }
class Bar implements Foo<Baz> { ... }

我有一个Bar对象。如何为它(Baz)获取T的值

到目前为止,我只获得了接口和T,但我看不到获得其值的方法

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    如果类路径上已经有了Guava,那么通过类型而不是索引来指定接口/超类会更加健壮

    TypeToken<?> baz = TypeToken.of(Bar.class).resolveType(Foo.class.getTypeParameters()[0]);
    System.out.println(baz.getRawType()); // class Baz
    
  2. # 2 楼答案

    Type type = bar.getClass().getGenericInterfaces()[0];
    
    if (type instanceof ParameterizedType) {
        Type actualType = ((ParameterizedType) type).getActualTypeArguments()[0];
        System.out.println(actualType);
    }
    

    当然,在一般情况下,您应该迭代数组,而不是假设它只有一个元素([0])。在上面的示例中,您可以将actualType强制转换为java.lang.Class。在其他情况下可能会有所不同(见meriton的评论)