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

    [java] oggetto non identificato

    Mi succede una cosa stranissima avendo istanziato un ArrayList(ho usato questo import: java.util.ArrayList).

    richiamo l'oggetto array che contiene oggetti Persona, in questo modo:

    for(int i=0;i<array.size();i++) System.out.println(array.get(i).getNome());


    mah...mi dice che getNome() non lo riconosce...eppure vi assicuro..è un metodo pubblico della classe persona..

    se invece richiamo il metodo toString() sempre contenuto nella classe persona allora non mi segnala nessun errore...

    Non è inspiegabile?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    vi faccio vedere la classe Persona...per farvi rendere conto:

    class Persona{

    private String cognome;
    private String nome;
    private String telefono;
    //costruttore
    public Persona(String cogn, String nom, String tel){
    cognome = cogn;
    nome = nom;
    telefono = tel;
    }

    public String getNome(){
    return nome;
    }

    public String getCognome(){
    return cognome;
    }

    public String getTel(){
    return telefono;
    }

    public String toStringa(){
    return cognome + " " + nome + " " + telefono;
    }

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Attento: il metodo get() restituisce un Object... è necessario un casting:

    for(int i=0;i<array.size();i++) System.out.println(((Persona) array.get(i)).getNome());


    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

  4. #4
    è spiegabile il toString() perchè tale metodo è definito nella classe Object: se stato tu a ridefinirlo (secondo un procedimento chiamato overriding).

    In ogni caso se vuoi gestire le collezioni per bene ti consiglio di usare un Iterator...
    SO: Debian Sarge kernel 2.6.11
    Lang: Java, C++, C

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Ma dai che bravo! ...però è abbastanza fuori dall'ordinario, non è facile capirlo...persona è un object o no? e poi perchè l'altro metodo toString() funzionava?
    se mi sai spiegare questo, aspetto una tua risposta, altrimenti grazie comunque.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    grazie anche a te Lucis..ma riuscite a darmi una spiegazione un po' piu chiara visto che non conosco i termini che voi usate?

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    toString() è definito nella classe object? quindi non è un nome come un altro?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Lucked
    Ma dai che bravo! ...però è abbastanza fuori dall'ordinario, non è facile capirlo...persona è un object o no? e poi perchè l'altro metodo toString() funzionava?
    se mi sai spiegare questo, aspetto una tua risposta, altrimenti grazie comunque.
    L'altro toString funziona perchè toString() è un metodo presente in TUTTI gli Object, mentre il metodo getName() è un metodo particolare della tua classe.

    Tutte le classi sono Object, ma gli Object non hanno un metodo getName(). ;-)

    Se ti serve una spiegazione al termine casting (o meglio, cast), significa CONVERSIONE DI TIPO; ne esistono di due tipi: una automatica e una forzata.

    Un cast automatico avviene, per esempio, per i valori numerici: se usi un int in un'espressione double automaticamente l'int viene convertito al relativo valore double (e la cosa è ovvia: tutti gli interi sono anche valori reali, ma non tutti i valori reali sono anche interi!)
    Il contrario, invece, viene detto cast esplicito(o forzato): se hai un valore double che rappresenta un numero che potrebbe essere intero (5.0 per esempio), puoi effettuarne un cast esplicito (perchè non avviene in automatico, per la ragione che ti ho esposto sopra). Per fare un cast si racchiude fra le parentesi il tipo a cui si vuole forzare l'oggetto e lo si antepone all'oggetto.

    Quindi tutti gli oggetti sono automaticamente convertiti (cast implicito, o automatico) ad Object perchè tutti sono Object, mentre un Object potrebbe rappresentare qualsiasi cosa, quindi se sai che l'Object è un oggetto di una particolare classe, ne fai un cast esplicito mettendo fra parentesi il tipo a cui lo vuoi convertire.


    Spero di essere stato chiaro, almeno ci ho provato.

    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

  9. #9
    Allora calma.
    In Java tutte le classi sono sottoclassi (dirette o indirette) della classe Object. Infatti se leggi la documentazione noti che ogni classe discende da Object (anche quelle che scriviamo) e quindi tutte hanno i metodi equals(), toString(), etc... di cui è dotato Object.

    Secondo le regole dell'ereditarietà i metodi delle superclassi (genitrici) sono ereditati dalle sottoclassi (figlie). La tua collezione restituisce oggetti di tipo Object e quindi essi possono eseguire il toString(). Ma quale toString() eseguono? Quello della sottoclasse. Infatti se provi ad estendere Persona, magari con una classe Studente:

    codice:
    public class Studente extends Persona {
        public String toString() {
            return "Sono uno studente, cavolo!";
        }
    }
    vedrai che richiamando il toString() non viene eseguito il codice di persona.
    Se vuoi leggerti un po' di materiali in italiano su questi argomenti prova a dare un'occhiata a http://merialdo.dia.uniroma3.it/dida...materiale.html.

    SO: Debian Sarge kernel 2.6.11
    Lang: Java, C++, C

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Grazie

    Dato che ci sono..Anche questa cosa non mi è molto chiara:

    toString() è un metodo che uso per unire vari return di stringhe ma devo pur sempre definirlo ad esempio qui in Persona...quindi perchè mai chiamarlo toString() ? ...e poi quando mi dite che questo metodo è in object c'è qualcosa che non mi torna...le cose non collimano molto...Potrei chiamarlo anche diversamente..no?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.