PDA

View Full Version : [JAVA] Metodi ambigui. Come scegliere?


Player1
11-12-2011, 18:32
Salve ragazzi, ho un piccolo problema, vi posto qui la parte di codice che me lo crea:

double nextValue = curveArray[value];
result.addValue(nextValue, "Experiment", value+1);


La prima istruzione crea la variabile nextValue di tipo double selezionando un valore dall'array "curveArray". Sia l'array che la variabile nextValue contengono dati di tipo primitivo double.

Alla seconda istruzione sorge il problema. L'oggetto "result" infatti ha due metodi "addValue" con la seguente segnatura:
- void addValue(Number value,Comparable rowKey,Comparable columnKey);
- void addValue(double value,Comparable rowKey,Comparable columnKey);

Come potete vedere i due metodi differiscono esclusivamente per il tipo del primo parametro e quando inserisco la variabile nextValue come primo parametro ho un problema di "reference ambiguous".
Come posso fare a specificare che voglio chiamare il secondo "addValue"? (Quello con il primo parametro di tipo double)
Vi ringrazio in anticipo per le risposte.

VICIUS
11-12-2011, 18:49
Quando si tratta di scegliere quale implementazione chiamare Java prende sempre quella più specifica. Nel tuo caso è di sicuro quella con double.

Player1
11-12-2011, 19:11
Quando si tratta di scegliere quale implementazione chiamare Java prende sempre quella più specifica. Nel tuo caso è di sicuro quella con double.

Il problema è più concreto, non era solo un dubbio di programmazione.

Se provo a compilare con il codice che ho postato mi da il seguente errore in compilazione:
error: reference to addValue is ambiguous, both method addValue(Number,Comparable,Comparable) in DefaultCategoryDataset and method addValue(double,Comparable,Comparable) in DefaultCategoryDataset match
result.addValue(nextValue, "Experiment", value+1);

VICIUS
11-12-2011, 19:45
Non dovrebbe succedere. C'è quel value+1 al posto di un Comparable che puzza di autoboxing. Prova a metterci un Double.valueOf(value+1) ed accendi un cero. :)

Player1
11-12-2011, 19:55
Non dovrebbe succedere. C'è quel value+1 al posto di un Comparable che puzza di autoboxing. Prova a metterci un Double.valueOf(value+1) ed accendi un cero. :)

Sì, funziona, grazie!
Ma non riesco a capire perché.
In realtà ho messo un Integer.valueOf(value+1) al posto del terzo parametro perché quello è un intero, solo il primo è un double, non lo avevo specificato nei post precedenti.
La cosa che mi rende perplesso è che comunque quel parametro è un Comparable in entrambi i metodi addValue. Se Java mi dice che il problema è della "reference ambiguous" tra i due metodi ed i due metodi differiscono solo per il primo parametro come mai ho risolto modificando il terzo?!?
Mah misteri della programmazione.. in ogni caso ora funziona, o almeno me lo fa compilare.
Grazie infinite!

franksisca
13-12-2011, 09:52
se metti value +1.0 dovrebbe riconoscere auotomaticamente il tipo double