Apache Commons BeanUtils获取列表属性

问题描述:

在Apache Commons BeanUtil中,如何在列表中获取类型?例如Apache Commons BeanUtils获取列表属性

class Track { 
    List<Actor> actorList = new ArrayList<Actor>(); 
} 

System.err.println(PropertyUtils.getPropertyType(trackBean, "actorList")); 
// it should give me Actor instead of java.util.List 

谢谢。

+0

所有通用类型都受到类型擦除的影响,所以在运行时Java不知道这是一列参与者。我不知道bean utils,但为了这个工作,这必须在编译时解决。 – 2011-04-10 17:49:39

+0

Duplicate of:http://*.com/questions/1127923/specifying-generic-collection-type-param-at-runtime-java-reflection – 2011-04-10 20:49:57

我不知道是否可以用beanutils。但是你可以用反射来做到这一点。

Field field = Track.class.getDeclaredField("actorList"); 
ParameterizedType pt = (ParameterizedType) field.getGenericType(); 
Class clazz = (Class) pt.getActualTypeArguments()[0]; 

你也许会需要以上(是否可以投,实际类型参数是否存在等)几检查,但你的想法。

类型信息在运行时被擦除,除非它是结构性的 - 例如,字段或类的类型参数。