collections

8 views
Skip to first unread message

Cristiano Tomasi

unread,
May 5, 2012, 5:56:01 AM5/5/12
to jug...@googlegroups.com
Ciao

scusate la domanda idiota ma perchè

  public void setTags(List<Tag> tags) {
  }

  public void setTags(List<String> StringList) {
  }

generano un errore:
name clash: setTags(java.util.List<lmj.Tag>) and setTags(java.util.List<java.lang.String>) have the same erasure

il primo a come parametro un lista di oggetti "Tag" il secondo a come parametro una lista di oggetti "String", a me sembrano due cose diverse
perche' per il compilatore sono due cose uguali?

al momento ho risolto cambiando il nome del secondo metodo, c'e' un modo più furbo?

saluti
Cris.



Simone Bordet

unread,
May 5, 2012, 6:01:10 AM5/5/12
to jug...@googlegroups.com
Ciao,

On Sat, May 5, 2012 at 11:56 AM, Cristiano Tomasi <ctom...@gmail.com> wrote:
> Ciao
>
> scusate la domanda idiota ma perchè
>
>   public void setTags(List<Tag> tags) {
>   }
>
>   public void setTags(List<String> StringList) {
>   }
>
> generano un errore:
> name clash: setTags(java.util.List<lmj.Tag>) and
> setTags(java.util.List<java.lang.String>) have the same erasure
>
> il primo a come parametro un lista di oggetti "Tag" il secondo a come
> parametro una lista di oggetti "String", a me sembrano due cose diverse
> perche' per il compilatore sono due cose uguali?

Perchè i generics in Java sono implementati tramite erasures
(http://en.wikipedia.org/wiki/Generics_in_Java#Type_erasure): il
compilatore fa il massimo per controllare i tipi, ma poi deve generare
bytecode che non contiene informazioni sul type parameter.
Quindi, a livello di bytecode, i due metodi sarebbero uguali, e questo
è illegale.

> al momento ho risolto cambiando il nome del secondo metodo, c'e' un modo più
> furbo?

No.

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

Cristiano Tomasi

unread,
May 5, 2012, 6:05:49 AM5/5/12
to jug...@googlegroups.com
Grazie Simone

mi adeguerò alle erasures :)

saluti
Cris.


--
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.


Nicola Pedot

unread,
May 5, 2012, 6:16:04 AM5/5/12
to jug...@googlegroups.com

Cmq la domanda non era per niente idiota, anzi...
mette in luce un aspetto poco considerato dei generics,
che sorprende, in effetti a me pare uno spreco buttare informazione,

http://www.coderanch.com/t/262785/java-programmer-SCJP/certification/compile-time-error-same-erasure

This is only because of type erasure. Parameterized types are only to restrict the use to enter the right object into the collection. All the generic information is erased by the compiler.

sarà per compatibilità o efficienza? mah

ps ben vengano tutte le domande (su java:) !!!

nipe

Tiziano Lattisi

unread,
May 5, 2012, 7:37:05 AM5/5/12
to jug...@googlegroups.com, jug...@googlegroups.com
Però ricordo che c'è comunque la possibilità di recuperare il tipo di una collection, quando è valore di ritorno di un metodo.

t.
Reply all
Reply to author
Forward
0 new messages