代码之家  ›  专栏  ›  技术社区  ›  bwawok

如何获得泛型接口的具体类型

  •  17
  • bwawok  · 技术社区  · 16 年前

    public interface FooBar<T> { }
    

    我有一个实现它的类

    public class BarFoo implements FooBar<Person> { }

    我用 .getInterfaces

    2 回复  |  直到 16 年前
        1
  •  43
  •   BalusC    13 年前

    您可以通过 Class#getGenericInterfaces() 然后你再检查一下 ParameterizedType 然后抓住 actual type arguments 相应地。

    Type[] genericInterfaces = BarFoo.class.getGenericInterfaces();
    for (Type genericInterface : genericInterfaces) {
        if (genericInterface instanceof ParameterizedType) {
            Type[] genericTypes = ((ParameterizedType) genericInterface).getActualTypeArguments();
            for (Type genericType : genericTypes) {
                System.out.println("Generic type: " + genericType);
            }
        }
    }
    
        2
  •  5
  •   matt b    16 年前

    尝试以下操作:

    Class<T> thisClass = null;
    Type type = getClass().getGenericSuperclass();
    if (type instanceof ParameterizedType) {
        ParameterizedType parameterizedType = (ParameterizedType) type;
        Type[] typeArguments = parameterizedType.getActualTypeArguments();
        thisClass = (Class<T>) typeArguments[0];
    }