简体   繁体   中英

How to get type parameter values using java reflection?

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

I've got a Bar object. How to get the value of T for it ( Baz )?

So far, I only managed to get the interface and T , but I can't see a way to get its value.

Thanks in advance.

Type type = bar.getClass().getGenericInterfaces()[0];

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

Of course, in the general case, you should iterate over the array, rather than assuming it has excatly one element ( [0] ). With the above example, you can cast actualType to java.lang.Class . In other cases it may be different (see comment by meriton)

If you already have Guava on the classpath, this is a bit more robust as you specify the interface/superclass by type rather than index.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM