2013-02-12 8 views
5

Ho da poco passato da JDK1.6 a JDK 1.7.Avviso eclissi: conversione deselezionata vs specifica ridondante degli argomenti tipo

ho questo codice:

SomeClass<SomeType> someVariable = new SomeClass<SomeType>(createSomeObject()); 

Ora sto ricevendo un avvertimento:

Redundant specification of type arguments <SomeType> 

Se uso la soluzione rapida Eclipse mi dà questo:

SomeClass<SomeType> someVariable = new SomeClass<>(createSomeObject()); 

Quale risultati in

Got an exception - expecting EOF, found 'xyz' 

xyz è l'elemento successivo nel testo del mio codice.

Quando rimuovo le parentesi angolari, ottengo questo avvertimento:

SomeClass is a raw type. References to generic type SomeClass<M> should be parameterized 

Se posso aggiungere il parametro di tipo io alla fine con il primo avviso (spec ridondante ...)

WTF sta andando sopra?

Voglio mantenere entrambi gli avvisi e sto ancora utilizzando Eclipse 3.7.1. Non sono disposto ad aggiornare Eclipse, se esiste un altro modo per risolvere questo problema, poiché ci vorrà del tempo per configurarlo nel modo in cui lo voglio di nuovo.

+0

Controlla l'impostazione "Compile alla versione" di Eclipse Java. Potrebbe ancora essere impostato su 1,6, anziché su 7 –

+0

@MrSpoon Intendi "Livello di conformità del compilatore" in Conformità di Preferenze-Compilatore-JDK? Questo è impostato su 1.7. – Torsten

+0

Sì, quello. È un peccato. L'errore "Hai un'eccezione" non mi sembra un errore standard del compilatore. Quindi, credo che provenga da un altro costruttore di Eclipse. Quali altri builder hai abilitato in "Progetto/Proprietà/Builder"? –

risposta

3

ridondante specificazione di argomenti di tipo <SomeType>

proviene da Java 7 di type inference mechanism. Specificando i tipi generici per due volte è davvero superfluo, dal momento che il compilatore può intuire ciò che si richiede semplicemente dal

SomeClass<SomeType> someVariable = new SomeClass<>(createSomeObject()); 

e di conseguenza non è necessario il tipo generico sia nella dichiarazione e definizione (l'inferenza di tipo potrebbe andare oltre - per esempio con Scala dichiarate semplicemente LHS come val o var, e il compilatore sa che tipo deve essere veramente).

+0

Perfetto, ma c'è un modo per dire a MapStruct di generare un codice Java 8 corretto? – Sebien