getMethod().getReturnType nel caso di Collection: collezione di cosa?

7 views
Skip to first unread message

Tiziano Lattisi

unread,
Jan 14, 2012, 11:19:41 AM1/14/12
to jug...@googlegroups.com
Ciao ancora,
poniamo questa classe.

public class Cestino {

private Collection<Fragole> fragole;

public Collection<Fragole> getFragoleCollection() {
return fragole;
}
}

Se ispeziono il metodo per scovare il tipo restituito:

Class myType = Cestino.getMethod("getFragoleCollection").getReturnType();

ottengo che myType è un java.util.Collection.

Ottimo. Ma come faccio a sapere che è una Collection proprio di Fragole?

ciao!
t.

Davide

unread,
Jan 14, 2012, 12:11:01 PM1/14/12
to jug...@googlegroups.com
Devi guardare il "component-type".

Il 14 gennaio 2012 17:19, Tiziano Lattisi <tiziano...@gmail.com>
ha scritto:

> --
> You received this message because you are subscribed to the Google Groups "JUG Trentino Alto Adige Suedtirol" group.
> To post to this group, send email to jug...@googlegroups.com.
> To unsubscribe from this group, send email to jugtaa+un...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/jugtaa?hl=en.
>

--
  _|  _.    o  _|  _
 (_| (_| \/ | (_| (/_

Tiziano Lattisi

unread,
Jan 14, 2012, 12:34:07 PM1/14/12
to jug...@googlegroups.com
Mi ritorna null. Forse sbaglio qualcosa...

--
-- Tiziano Lattisi

Simone Bordet

unread,
Jan 14, 2012, 4:44:24 PM1/14/12
to jug...@googlegroups.com
Ciao,

2012/1/14 Tiziano Lattisi <tiziano...@gmail.com>:

Non puoi. In Java i generics sono implementati come erasure, quindi il
tipo parametrico viene eliso e l'informazione non è presente nel class
file (e quindi a runtime).

Simon
--
http://cometd.org
http://intalio.com
http://bordet.blogspot.com
----
Finally, no matter how good the architecture and design are,
to deliver bug-free software with optimal performance and reliability,
the implementation technique must be flawless.   Victoria Livschitz

Davide

unread,
Jan 15, 2012, 8:24:31 AM1/15/12
to jug...@googlegroups.com

Mi pare di ricordare che invece gli array [] lo dovrebbero mantenere a runtime ...

Tiziano Lattisi

unread,
Jan 15, 2012, 10:38:37 AM1/15/12
to jug...@googlegroups.com
Il 14 gennaio 2012 22:44, Simone Bordet <sbo...@intalio.com> ha scritto:
> Ciao,
>
> 2012/1/14 Tiziano Lattisi <tiziano...@gmail.com>:
>> Ciao ancora,
>> poniamo questa classe.
>>
>> public class Cestino {
>>
>>    private Collection<Fragole> fragole;
>>
>>    public Collection<Fragole> getFragoleCollection() {
>>        return fragole;
>>    }
>> }
>>
>> Se ispeziono il metodo per scovare il tipo restituito:
>>
>> Class myType = Cestino.getMethod("getFragoleCollection").getReturnType();
>>
>> ottengo che myType è un java.util.Collection.
>>
>> Ottimo. Ma come faccio a sapere che è una Collection proprio di Fragole?
>
> Non puoi. In Java i generics sono implementati come erasure, quindi il
> tipo parametrico viene eliso e l'informazione non è presente nel class
> file (e quindi a runtime).
>
> Simon

Grazie dell'indicazione. Ho trovato poi l'approfondimento qui:
http://docs.oracle.com/javase/1.5.0/docs/guide/language/generics.html

ciao!
t.

Tiziano Lattisi

unread,
Jan 17, 2012, 5:42:13 AM1/17/12
to jug...@googlegroups.com
In realtà si può, è un'informazione che viene mantenuta dal class file.

((ParameterizedType)
myClass.getDeclaredField("myCollection").getGenericType()).getActualTypeArguments()[0];

per conoscere il tipo di elementi della Collection "myCollection".

:-)

t.


Il 14 gennaio 2012 22:44, Simone Bordet <sbo...@intalio.com> ha scritto:

> --
> You received this message because you are subscribed to the Google Groups "JUG Trentino Alto Adige Suedtirol" group.
> To post to this group, send email to jug...@googlegroups.com.
> To unsubscribe from this group, send email to jugtaa+un...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/jugtaa?hl=en.
>

--
-- Tiziano Lattisi

Reply all
Reply to author
Forward
0 new messages