Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    URGENTE: Problema tipi

    Scusate il titolo, oggi pomeriggio ho un esame di programmazione, mi č stato detto che il professore non č molto tolleranete se non si sanno usare i tipi generici.
    Se io ho ad esempio una classe che denota un insieme di alberi, normalmente faccio troppi cast, e non piace al prof, se per esempio scrivo una cosa come:

    codice:
    Nodo tmp=getRoot();
    if((E)tmp.getElement().compareTo((E)node2.getElement()))
    Non piace tanto....
    Come posso utilizzare pił oggetti senza problema di tipi?
    In molti casi se uso un' istruzione come
    codice:
    tmp.getElement()
    devo per forza fare un cast
    codice:
    (Node)tmp.getElement()
    Come posso fare in modo che tutto venga riconosciuto senza fare cast?
    Mi č stato detto che si potrebbero utilizzare delle interfacce....ma in che modo?

    Spero vediate questo post.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora a parte il titolo (forse qualche moderatore ti bacchetterą) una cosa che non č molto elegante da vedere (e che puņ farti confondere) č questa:

    codice:
    if((E)tmp.getElement().compareTo((E)node2.getElement()))
    in genere dividi sempre i cast (se uno non va a buon fine č pił facile capirlo.

    Poi per quanto riguarda l'uso dei generics, fai una specifica di tipo ma alla dichiarazione dell'elemento (che puņ anche stare in un'interfaccia).
    Detto questo, come č dichiarato l'elemento?

  3. #3
    Allora...il problema non č su un esercizio preciso, ma in generale, soppniamo di avere una classe Insieme<E> che contine oggetti Node<E> che contengono alberi Tree<E>.
    A volte mi capita di dovermi trovare in espressioni del tipo:

    codice:
    if(((Tree)((Node)tmp).getElement()).compareTo(((Tree)((Node2)tmp).getElement()))
    Ma tutit questi cast non piacciono al prof, c'č un modo...per far si che tutti i generics vengano riconosciuti senza fare tutti quei cast?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quando dichiari l'elemento vai a specificare il tipo.
    In generale l'interfaccia vuole la tua signature, ma quando dichiaro l'elemento vado a cambiare un po' le cose.

    Guarda List (java 6)

    http://download.oracle.com/javase/6/...util/List.html

    L'interfaccia prevede l'uso del tipo generico, ma spesso quando la uso faccio una roba del tipo

    codice:
    List<String>lista ;
    quindi č giusto dichiarare le robe cosģ nell'interfaccia, ma quando tu dichiari la tua variabile devi specificare il tipo (come hai visto sopra), tipo che deve essere presente nella istanziazione (anche se da java 7 non č pił necessario visto che č dedotto dalla dichiarazione)

    codice:
    lista = new ArrayList<String>();
    Il principio č uguale, spero sia chiaro

  5. #5
    Ah perfetto credo di avere capito, quindi il mio errore sta nel mettere ad ogni cosa il tipo E e nell'utilizzare per ogni struttura elementi di tipo E, se invece specifico negli oggetti qualcosa come:

    codice:
    Insieme<Node> collezione=new Insieme(..)
    codice:
    Node<Tree> nodo=new Node(..)
    Dovrebbe andare..ultima domanda....se scrivo:

    codice:
    Node<Tree<E> > nodo=new Node(..)
    Dą problemi forse....meglio mettere solo il tipo vero e proprio senza E...
    Grazie mille.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    prova a compilare e ad eseguire, non ne sono sicurissima (il miglior test č quello fatto provandole le cose)

    ciao e in bocca al lupo per l'esame

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da valia
    allora a parte il titolo (forse qualche moderatore ti bacchetterą)
    Direi di sģ: č perfettamente inutile scrivere parole come "Urgente" nel titolo. Non c'č nessuna urgenza, a prescindere dal fatto che tu abbia un esame fra una settimana, oggi pomeriggio o solo fra 1 ora. Tutte le discussioni hanno la stessa medesima urgenza e l'indicazione di tale parola nel titolo fa perdere l'obiettivo principale del forum: partecipare ad una discussione per risolvere un problema e dare modo, cosģ, ad altri utenti di avvalersi delle stesse informazioni.

    Il titolo non dovrebbe, perņ, contenere queste inutili esortazioni, quanto piuttosto qualcosa di pił utile, come una sintetica descrizione del problema.

    E' ben scritto nel regolamento interno.

    Per questa volta l'ho corretto e aggiornato io.


    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

  8. #8
    Grazie ad entrambi.
    Mi scuso

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.