View Full Version : [java] source level error
Miky Mouse
01-12-2007, 10:25
sto cercando di fare una classe parametrizzata rispetto a un tipo, quinci class classe<tipo>{...}
ma quando provo a compilare ottengo questo errore:
Syntax error, type parameters are only available if source level is 5.0
compilo da linea di comando su linux, niente ide e cose varie. l'output di java -version è questo:
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)
e ho appena ricompilato e installato jre.... dove sbaglio??
Miky Mouse
01-12-2007, 10:40
e javac -version?
Eclipse Java Compiler v_686_R32x, 3.2.2 release, Copyright IBM Corp 2000, 2006. All rights reserved.
c'entra qualcosa con il fatto che avevo messo eclipse? cioè cerca di usare il compilatore di eclipse?
Sì, usa quello.
O installi un jdk della sun o imposti
-source 1.5
(credo)
Miky Mouse
01-12-2007, 13:31
Sì, usa quello.
O installi un jdk della sun o imposti
-source 1.5
(credo)
ho provato a mettere j2sdk1.4 ma adesso se provo a compilare mi da un errore come se non sapesse neanche che si può mettere <tipo> dopo il nome della class, dice che deve esserci {
e se provo a fare javac -version mi dice
javac: invalid flag: -version
Usage: javac <options> <source files>
dove sbaglio?
Infatti i tipi parametrici ci sono dalla versione 5,
prova con il compilatore di eclipse con opzione
-source 1.5
Miky Mouse
01-12-2007, 16:31
Infatti i tipi parametrici ci sono dalla versione 5,
prova con il compilatore di eclipse con opzione
-source 1.5
si infatti avevo già visto, funziona così ;)
non c'è un modo per impostarlo di default senza doverlo rimettere a ogni compilazione?
per il resto... mi da un sacco di warning quando cerco di usare cast da object a TIPO (dove tipo è parametrizzato)
roba del tipo:
Type safety: The cast from Object to TIPO is actually checking against the erased type Object
oppure
Type safety: The method nome_funzione(Object) belongs to the raw type Classe. References to generic type Classe<TIPO> should be parameterized
ovviamente i cast ecc sono tutti safe perche so quello che fanno, ma non c'è un modo per tranquillizzare il compilatore e evitarmi 12 warning di questo tipo a ogni compilazione?
banryu79
02-12-2007, 12:58
ovviamente i cast ecc sono tutti safe perche so quello che fanno, ma non c'è un modo per tranquillizzare il compilatore e evitarmi 12 warning di questo tipo a ogni compilazione?
Basta che fai esattamente quello che il warning ti consiglia: cambia il riferimento generico a Object nei metodi che prendono come parametro di ingresso un oggetto Class<TIPO> in un riferimento esplicito a Classe<TIPO>.
nome_funzione(Object) -> nome_funzione(Classe<TIPO>) e dentro non devi neanche più castare.
Miky Mouse
02-12-2007, 17:20
Basta che fai esattamente quello che il warning ti consiglia: cambia il riferimento generico a Object nei metodi che prendono come parametro di ingresso un oggetto Class<TIPO> in un riferimento esplicito a Classe<TIPO>.
nome_funzione(Object) -> nome_funzione(Classe<TIPO>) e dentro non devi neanche più castare.
mmh.. no forse non mi sono spiegato.
vi metto qualche frammento di codice che stò usando...
questa funzione:
public void insert(T x){
if(!els.contains(x)) els.addElement(x);}
dove els è un vector di T e T è il parametrizzato, la insert se non è presente l'elemento lo aggiunge alla fine.
nel main dichiaro un nuovo contenitore di oggetti:
GSet naturali = new GSet<Integer>();
quindi ora T dovrebbe essere un Integer...
poi chiamo la funzione così:
naturali.insert(new Integer(123));
cos'è che non ho capito?
banryu79
03-12-2007, 09:37
cos'è che non ho capito?
Lascia... non avevo capito bene io! :)
Guarda io uso NetBeans e non Eclipse, e quel warning è prodotto dal compilatore di Eclipse...
Ho trovato questo che spiega il significato del messaggio:
--> Type Safety: erased type (http://mindprod.com/jgloss/compileerrormessages.html#TYPESAFETYERASED)
GSet naturali = new GSet<Integer>();
prova a dichiarare GSet<Integer> naturali...
naturali.insert(new Integer(123));
puoi passare direttamente 123, da java 5 c'è l'autoboxing
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.