[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