2013-12-13 65 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(); 
}