Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [java] un cast che non funziona

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    public int intValue() della classe Integer.
    Slack? Smack!

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    int a = ((Integer)data).intValue()

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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.

  6. #6
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    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


  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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:

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    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!

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    ok grazie delle indicazioni

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Allora bisognerebbe avere un po' di teoria sulla programmazione Object Oriented.

    Quando tu hai fatto questa cosa
    codice:
    Comparable data = new Integer(100);
    cosa hai fatto? Hai dichiarato un oggetto di tipo Comparable.
    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:
    codice:
    Figura f = new Triangolo();
    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à.

    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.