PDA

View Full Version : [java] problema con errori e segnalazioni (@Override)


diablo...aka...boss
17-06-2009, 17:39
private Vector listeners = new Vector();

Vector is a raw type. References to generic type Vector<E> should be parameterized!

Se mettessi prima della dichiarazione questa annotazione @SuppressWarnings("unchecked") dopo dovrei metterla anche in altri punti e non mi piace molto come soluzione.
Penso sia abbastanza banale come cosa ma non riesco a risolverla.




Altra cosa: su un @Override prima non mi venuva segnalato errore, adesso si :wtf:
è prima di un metodo del genere public void stateChanged(ChangeEvent ce) { }

banryu79
17-06-2009, 18:31
1) Per il warning sul Vector, il motivo è dovuto alla presenza dei Generics in Java, introdotti dalla versione Java 5 in poi.
Per evitare il warning (che non è un errore) parametrizza il tipo: per esempio, se ti serve un Vector di String lo dichiarerai & inizializzerai così:

Vector<String> strings = new Vector<String>();

Quindi ci cacci dentro tutte le String che vuoi e quanto ti fai restituire un elemento non occorre che fai il cast esplicito perchè ti viene già restituito del tipo specifico parametrizzato.

2) per l'errore sull'annotazione @Override (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Override.html) controlla di aver eseguito correttamente l'override del metodo (controlla la firma del metodo, da Java 5 in poi i metodi sono covarianti).
[/CODE]

diablo...aka...boss
17-06-2009, 19:28
2) per l'errore sull'annotazione @Override (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Override.html) controlla di aver eseguito correttamente l'override del metodo (controlla la firma del metodo, da Java 5 in poi i metodi sono covarianti).
[/CODE]

Il primo punto l' ho risolto, grazie!

Cosa intendi per controllare la firma del metodo ??
Capisco che l' override si mette poichè riscrivo un metodo ereditato, ma non capisco perchè mi da errore.
Il metodo è all' interno di una classe che estende MouseAdapter...

public void stateChanged(ChangeEvent ce) {
// Metodo per la gestione degli eventi dello JSlider.
JSlider source = (JSlider)ce.getSource();
if (source.getValueIsAdjusting()) {
// Ottiene lo stato di avanzamento del cursore dello slider.
double fps = (double)source.getValue();
if(WhatSuiteSoundManager.getInstance().getAudioPlayer() != null) {
WhatSuiteSoundManager.getInstance().getAudioPlayer().setMediaTime(new Time(fps));
}
}
}

banryu79
18-06-2009, 09:31
Che io sappia il fatto che la tua classe estenda (extends) MouseAdapter non c'entra nulla; un metodo con la firma: void stateChanged(ChangeEvent e) è dichiarato solo nell'interfaccia javax.swing.event.ChangeListener.

Quindi le cose sono due (anzi tre, non ho capito bene in effetti in quale caso ti trovi):

1) la classe in cui hai definito il metodo 'stateChanged' eredita già da una classe che già comprende la definizione di quel metodo. Quindi la tua classe sta eseguendo un override del metodo e allora devi annotarlo con @Override.

2) la classe in cui hai definito il metodo 'stateChanged' estende una interfaccia che dichiara quel metodo. Quindi la tua classe deve eseguire l'implementazione del metodo e allora non devi annotarlo con @Override.

3) la classe in cui hai definito il metodo 'stateChanged' non eredita da nessuno la definizione di quel metodo. Quindi la tua classe sta eseguendo una definizione di un metodo "nuovo" e quindi non devi annotarlo con @Override.

Scoperto in quale caso ti trovi dovrebbe essere semplice risolvere.
Per curiosità, che IDE usi?

diablo...aka...boss
18-06-2009, 14:28
Presumo proprio sia il 2 caso allora, ovviamente togliendo l' annotazione @override non compare più nessun errore. La classe estende MouseAdapter e implementa ActionListener e ChangeListener.
Come IDE ho usato Eclipse.

banryu79
18-06-2009, 16:59
Presumo proprio sia il 2 caso allora, ovviamente togliendo l' annotazione @override non compare più nessun errore. La classe estende MouseAdapter e implementa ActionListener e ChangeListener.
Come IDE ho usato Eclipse.
Tra l'altro ho detto una cosa errata: i casi erano due, il numero 1) non era applicabile perchè, sapendo già da prima che la tua classe estende MouseAdapter, e sapendo che in Java una classe può estendere solo una classe, e sapendo che MouseAdapter a sua volta non estende ne implementa alcun metodo con la firma di stateChanged era ovvio che tale metodo non poteva essere stato ereditato, quindi niente @Override per forza di cose.