2013-12-13 32 views
3

我对推土机架构自定义转换器得到对象列表中的Java泛型类型

呼吁泛型类型列表源和泛型类型列表的目标

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; 
    } 
} 

constom转换器:如果List<Person>作为目的地址转换器通过我需要从转换器方法内的目标对象中获取Person类。

感谢提前。

回答

1

你可以,如果你的类被声明如下调用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(); 
}