[jboss-dev] generic collection item type

Alexey Loubyansky alexey.loubyansky at redhat.com
Mon Jul 30 05:19:06 EDT 2007


configuration.getTypeInfo(...) may be a wrong way to load a generic type 
but even if I declare a field of type JBossEnterpriseBeansMetaData and

Field beans = getClass().getDeclaredField("beans");
Type beansGType = beans.getGenericType();
ClassInfo classInfo = (ClassInfo) configuration.getTypeInfo(beansGType);

the result will be the same.

Alexey

Alexey Loubyansky wrote:
> No, it won't.
> This
>       ClassInfo classInfo = (ClassInfo) 
> configuration.getTypeInfo(JBossEnterpriseBeansMetaData.class);
>       System.out.println("isCollection: " + classInfo.isCollection());
>       System.out.println("type args: " + 
> classInfo.getActualTypeArguments());
>       System.out.println("superclass args: " + 
> Arrays.asList(classInfo.getGenericSuperclass().getActualTypeArguments()));
> 
> results in
> 
> isCollection: true
> type args: null
> superclass args: 
> [ReflectClassInfoImpl at f38798{name=org.jboss.ejb.metadata.spec.EnterpriseBeanMetaData}, 
> ReflectClassInfoImpl at 4b222f{name=org.jboss.ejb.metadata.jboss.JBossEnterpriseBeanMetaData}, 
> ReflectClassInfoImpl at b169f8{name=org.jboss.ejb.metadata.spec.EnterpriseBeansMetaData}] 
> 
> 
> 
> Ales Justin wrote:
>> This is not just Collection specific.
>>
>> Doing this (TypeInfo[] types = typeInfo.getActualTypeArguments();) on 
>> JBossEnterpriseBeansMetaData would return you those 3 types:
>>
>> (pseudo code ;-)
>> types[] = {EnterpriseBeanMetaData, JBossEnterpriseBeanMetaData, 
>> EnterpriseBeansMetaData};
>>
>> Rgds, Ales
>>
>>  >>>
>>
>> This approach assumes that the component type can be determined with
>>
>> TypeInfo[] types = typeInfo.getActualTypeArguments();
>> if (types != null)
>>     elementType = types[0];
>>
>> This won't work for this class
>> https://svn.jboss.org/repos/common/jbossxb-builder/trunk/src/test/java/org/jboss/ejb/metadata/jboss/JBossEnterpriseBeansMetaData.java 
>>
>>
>> for which its super class should be checked for type arguments and the
>> component type is the second argument.
>>
>> I guess I'll need to specify the component type with an annotation. But
>> it would be nice to have something like Class.getComponentType() to work
>> for generic collections too.
>>
>> Alexey
>> _______________________________________________
>> jboss-development mailing list
>> jboss-development at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/jboss-development
> 



More information about the jboss-development mailing list