从对象列表java中获取泛型类型

时间:2013-12-13 05:51:30

标签: java generics reflection

我有推土机框架的自定义转换器

constom转换器调用泛型类型列表源和泛型类型列表目标

public class ListCommonCustomConverter implements ConfigurableCustomConverter{
  public Object convert(Object destination, Object source, Class<?> destinationClass, Class<?> sourceClass) {
    log.info("Inside CommonCustomConverter :: convert");
    // Need to fine generic type of list
    return null;
  }
}

例如:如果List<Person>作为转换器的目的地传递,我需要从转换器方法内的目标对象获取Person类。

先谢谢。

1 个答案:

答案 0 :(得分:1)

如果您的类声明为:{/ p>,则可以通过调用getClass().getGenericInterfaces()从泛型类型获取类型信息

public class ListCommonCustomConverter implements ConfigurableCustomConverter<Person>

但是由于这个转换器没有参数化,你可以做一个技巧:

public interface CustomConverterWithTypeInfo<T> extends ConfigurableCustomConverter{
}


public class ListCommonCustomConverter implements CustomConverterWithTypeInfo<Person>{
    public Object convert(Object destination, Object source, Class<?> destinationClass, Class<?> sourceClass) {
        Class<?> myClass = (Class)((ParameterizedType)getClass().getGenericInterfaces()[0]).getActualTypeArguments()[0];
        //...
    }
}

或者你可以这样做:

List<?> list = (List)destination;
if(!list.isEmpty()){
     Class<?> myClass = list.get(0).getClass();
}