ho una variabile: Comparable data;
gli assegno:
data = new Integer(100);
come faccio a riprendermi il mio intero?
ho provato con
(Integer) data
(int) data
ma senza successo
ho una variabile: Comparable data;
gli assegno:
data = new Integer(100);
come faccio a riprendermi il mio intero?
ho provato con
(Integer) data
(int) data
ma senza successo
public int intValue() della classe Integer.
Slack? Smack!
No, non funziona, ho provato:
int a = data.intValue();
mi risponde :
cannot resolve symbol
symbol : method intValue ()
location: interface java.lang.Comparable
int a = data.intValue();
^
1 error
Procedura completata con codice di uscita 1
Che bravo..neanche alla Sun lo sapevano...ma come ti è venuto in mente?
Io non riesco a capire la logica di queste conversioni, ne ho trovato alcuna spiegazione per adesso.
Guarda che non ho fatto nulla di speciale...è una normale operazione di casting e dubito che alla Sun non lo sapessero :gren:
Tu hai dichiarato data come un Comparable, quindi su data puoi solo invocare metodi dichiarati nell'interfaccia Comparable. intValue è un metodo della classe Integer, non di Comparable. Tu invochi intValue su data solo perchè sai che in realtà data lo istanzi creando un Integer. Per poter invocare un metodo di Integer su data devi quindi fare il cast ad Integer con la sintassi
(Integer)data
A questo punto puoi invocare il metodo intValue
((Integer)data).intValue
Il discorso che hai fatto mi stà bene ma ci sono altre cose che ancora non ho ben chiare...cmq grazie
ma ad esempio perchè il cast con (int) da esito negativo?
:bubu:
Object
\_Number
\_Integer implements Comparable, Serializable
Integer estende la classe Number derivata a sua volta da Object, omnipresente.
Implementa altresi comportamenti descritti dalle interfacce Comparable e Serializable.
Puoi quindi fare riferimento ad un oggetto Integer come Object
Number ma anche Comparable e Serializable.
Naturalmente devi effettuare eventuali cast per operare
direttamente con il tipo Integer.
Conseguentemente, non puoi effettuare cast con altri tipi,
int nel tuo esempio, pena la generazione di una eccezione.
Slack? Smack!
ok grazie delle indicazioni
Allora bisognerebbe avere un po' di teoria sulla programmazione Object Oriented.
Quando tu hai fatto questa cosa
cosa hai fatto? Hai dichiarato un oggetto di tipo Comparable.codice:Comparable data = new Integer(100);
Dato che Integer (come molte altre classi) implementano questa interfaccia, esse possono essere viste come oggetti di tipo Comparable.
Dato che un Triangolo è anche una Figura, tu puoi fare una cosa di questo tipo:
Però figura è molto più generale di Triangolo, così come Comparable è molto più generale di Integer. Non puoi, quindi, richiamare un metodo specifico come intValue() su un oggetto che di Integer non conosce minimamente l'esistenza. Questa si chiama ereditarietà.codice:Figura f = new Triangolo();
Ma siccome un Integer, è anche un Comparable, allora puoi castare il tuo Comparable a Integer(visto che l'hai creato usando new Integer).
Come mai il cast non funziona con int... semplice: int è un tipo di dato primitivo, mentre Integer è un oggetto! Sono due entità assolutamente differenti.
La programmazione orientata agli oggetti non è così semplice come molti la vogliono far passare: senza un minimo di teoria non se ne esce!
Ciao.
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza