On Wed, 9 Apr 2008, Antonio Petrelli wrote:

> 2008/4/9, James Carman <[EMAIL PROTECTED]>:
> > Does anyone have code that can take care of this situation:
> >
> >  List<String> strings = new ArrayList<String>();
> >
> >  Class returnType = getReturnType(strings.getClass(), "get", int.class);
> >
> >  I want the "returnType" to be java.lang.String.  Does anyone have code
> >  that would return that?  Is it possible?
>
> It's not possible:
> http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
>
> <snip>
> Generics are implemented by type erasure: generic type information is
> present only at compile time, after which it is erased by the
> compiler.
> </snip>

Right, you can get at the declared type(s) with e.g.

List<String> strings = new ArrayList<String>();
ParameterizedType parameterizedType = (ParameterizedType)
  strings.getClass().getGenericSuperclass();
Type[] types = parameterizedType.getActualTypeArguments();
System.out.println(Arrays.asList(types));

[E]

static class StringList extends ArrayList<String> { }

List<String> strings = new StringList();
ParameterizedType parameterizedType = (ParameterizedType)
  strings.getClass().getGenericSuperclass();
Type[] types = parameterizedType.getActualTypeArguments();
System.out.println(Arrays.asList(types));

[class java.lang.String]

but not the runtime type(s).

   michael


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to