Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-06-2009, 02:08   #1
feboss
Senior Member
 
L'Avatar di feboss
 
Iscritto dal: Sep 2006
Città: Catania
Messaggi: 742
[JAVA] Generics

Ho un problema che non riesco a risolvere probabilmente a causa della mia scarsa comprensione dei generics

Ho una lista così composta
Codice:
public class Lista<E extends Comparable<E>>
private NodoL<E> Testa;
private NodoL<E> Coda;
...
e un nodo così composto
Codice:
public class NodoL<E>
{
    private NodoL<E> next;
    private NodoL<E> prev;
    private E info;
...
Per una serie di motivi devo effettuare un inserimento
Codice:
public void inserisciTesta(E val)
    {
        if (isEmpty())
            Testa = Coda = new NodoL<E>(val);
        else
            Testa = Testa.setPrev(new NodoL<E>(val, Testa, null));
    }
Ma non riesco a inserire un oggetto NodoL all'interno della lista.
Probabilmente perché dovrei implementare il compareTo.
Esiste un modo per procedere evitando di modificare la lista facendole accettare oggetti senza l'implementazione di compareTo?
qualcuno ha qualche idea?
__________________
Voglio sapere di che tessuto deve essere un discorso per non fare neanche una piega
Alternativa ai pacchi di NLITE
MacBook & Canon Ixus 80
feboss è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 02:15   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
L'unico modo è togliere quel "extends Comparable<E>" nella dichiarazione della classe Lista, ma se hanno messo questa restrizione forse è perché l'implementazione della lista fa uso dei metodi degli oggetti Comparable. Se così fosse devi far implementare Comparable agli oggetti che vuoi metterci dentro
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 02:34   #3
feboss
Senior Member
 
L'Avatar di feboss
 
Iscritto dal: Sep 2006
Città: Catania
Messaggi: 742
quell'extends comparable è li per evitare di castare a comparable quando faccio i confronti con il compareTo...Come ad esempio avviene negli inserimenti ordinati
Dici di modificare la lista eliminando l'extends comparable e facendo i cast dove servono?
__________________
Voglio sapere di che tessuto deve essere un discorso per non fare neanche una piega
Alternativa ai pacchi di NLITE
MacBook & Canon Ixus 80
feboss è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 02:43   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
Non so se ho capito bene, nei metodi di Lista in effetti usi dei metodi che sono propri di Comparable? Se eliminassi "extends Comparable<E>" ma continuassi ad usare il metodo compareTo, anche con il cast, non cambierebbe nulla, darebbe errore a runtime invece che a compiletime che è molto peggio.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 03:21   #5
feboss
Senior Member
 
L'Avatar di feboss
 
Iscritto dal: Sep 2006
Città: Catania
Messaggi: 742
uso solo il compareTo nei metodi di alcuni inserimenti(quelli ordinati)
Ho tolto l'extends comparable lasciando così:
public class Lista<E>
e adesso mi fa inserire una classe nodo ma ho un altro problema

Ho 2 classi nodo.una per la lista e una di un albero
NodoA e NodoL
Nella classe Albero ho inizializzato la lista e inserito il nodo dell'albero(NodoA).Fin qui nessun problema.
Quando però tento di estrarre il nodoA precedentemente inserito,mi da errore perché il metodo estrai(della lista) ha un return di tipo NodoL
normalmente la cosa dovrebbe risolversi con un cast...ma niente mi dice "inconvertible types"

una giornata a

edit: Risolto! sbagliavo e inserivo il campo nodo al posto del campo info(che in quel caso era il nodo che mi serviva)
io però non ho ancora capito sti generics.Pensavo fossero qualcosa che ti permetteva di avere un po più di flessibilità e astrazione.e invece mi ritrovo un listato pieno di warning che se per sbaglio inserisco un dato sbagliato mi esce un errore che non finisce più.
Molto probabilmente li uso nella maniera sbagliata. Resta il fatto che il mio listato è diventato poco leggibile dopo aver tolto <E Extends Comparable<E>> e aver fatto tutti i cast
__________________
Voglio sapere di che tessuto deve essere un discorso per non fare neanche una piega
Alternativa ai pacchi di NLITE
MacBook & Canon Ixus 80

Ultima modifica di feboss : 09-06-2009 alle 11:58.
feboss è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 20:37   #6
feboss
Senior Member
 
L'Avatar di feboss
 
Iscritto dal: Sep 2006
Città: Catania
Messaggi: 742
riformulo il problema.Magari riesco a spiegarmi meglio

Devo implementare una visita a livelli di un albero e per la mia soluzione decido di utilizzare un struttura di appoggio FIFO.
opto per una lista
Quindi ho:
Albero.java e NodoA.java
Lista.java e NodoL.java

ad un certo punto devo inserire il nodo dell'albero all'interno della lista
quindi il metodo è questo:
Codice:
private void xlivelli(Nodo<E> n)
    {
          Lista<Nodo> lista = new Lista<Nodo> ();

          if(n!=null)
          {
              lista.inserisciTesta(n);
              while(!lista.isEmpty())
              {
                  n = lista.getCoda().getInfo();
                  lista.eliminaCoda();

                  System.out.print(n.getInfo()+ " ");
                  if(n.getFiglio()!=null)
                      lista.inserisciTesta(n.getFiglio());
                  if(n.getDestro()!=null)
                      lista.inserisciTesta(n.getDestro());
              }
          }
    }
io voglio tenermi la lista come
Lista<E extends Comparable<E>>
non si può? Se tolgo l'extends devo fare tutti i cast a comparable nei metodi di inserimento ordinato.e il codice diventa inguardabile

Quindi a cosa mi serve sto <E>
non facevo prima a lasciare la lista con i campi informazioni di tipo Object?
non ci sto capendo più nulla
__________________
Voglio sapere di che tessuto deve essere un discorso per non fare neanche una piega
Alternativa ai pacchi di NLITE
MacBook & Canon Ixus 80
feboss è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 21:43   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
I tipi generici non sono altro che delle definizioni di operatori sui tipi e quando specifichi un limite superiore o inferiore nella loro dichiarazioni riduci l'insieme dei tipi a cui puoi applicarli secondo uno o più vincoli.

Nel nostro caso Lista è un operatore sui tipi comparabili con altri della stessa specie.

Se Nodo non è comparabile con altri Nodo la lista non può che rifiutarlo. E' come definire la somma tra numeri interi e poi cercare di usarla per sommare una frittata e un paracarro: non funziona, l'operatore non è "conscio" delle caratteristiche di frittate e paracarri.

Se questo è il problema allora hai due soluzioni: anzichè Nodo usi qualcosa che rispetti il vincolo degli operandi di Lista (l'essere comparabile) o rilassi quel vincolo.

La seconda mi sembra più opportuna.

Anzichè Lista<E extends Comparable<E>> puoi usare Lista<E> e dichiarare un costruttore che piglia un Comparator<E> come argomento: non devi fare conversioni esplicite e puoi ordinare gli elementi nella lista usando il comparatore.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2009, 17:32   #8
feboss
Senior Member
 
L'Avatar di feboss
 
Iscritto dal: Sep 2006
Città: Catania
Messaggi: 742
Cortesemente puoi farmi un esempio pratico?
ad esempio:
ricerca di un elemento nella lista
Codice:
public boolean trovab(E val)
    {
        NodoL<E> Temp;
        for (Temp = Testa; Temp != null && ((Comparable)Temp.getInfo()).compareTo(val) != 0; Temp = Temp.getNext());
        return Temp != null;
    }
oppure inserimento ordinato:
Codice:
public void inserisciOrdinato(E val)
    {
        if ( isEmpty() || ((Comparable)Testa.getInfo()).compareTo(val) >= 0)
            inserisciTesta(val);
        else
        {
            NodoL<E> Temp;
            for (Temp = Testa; Temp != null && ((Comparable)Temp.getInfo()).compareTo(val) < 0; Temp = Temp.getNext());
            if (Temp == null)
                inserisciCoda(val);
            else
                Temp.getPrev().setNext(Temp.setPrev(new NodoL<E>(val, Temp, Temp.getPrev())));
        }
    }
__________________
Voglio sapere di che tessuto deve essere un discorso per non fare neanche una piega
Alternativa ai pacchi di NLITE
MacBook & Canon Ixus 80
feboss è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2009, 17:41   #9
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Anzichè fare la conversione esplicita a Comparable supponendo che il parametro di tipo Comparator ricevuto dal costruttore sia assegnato ad un campo di nome "comparator" scrivi:

Temp != null && comparator.compare(temp.getInfo(), val) != 0 ...eccetera

Tutto qua. Comparator è simile a Comparable solo che il metodo compare accetta due argomenti: puoi vedere il primo dei due come se fosse il "this" di Comparable, la funzione è identica.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2009, 22:41   #10
feboss
Senior Member
 
L'Avatar di feboss
 
Iscritto dal: Sep 2006
Città: Catania
Messaggi: 742
le ho provate tutte ma non ci sono riuscito
Utilizzando il compare mi dice che non posso instanziarlo da un static context
e se passo come parametro Comparator<E> val, non posso fare gli inserimenti se non li casto a (E)

lascio perdere e me lo tengo con i cast a comparable
__________________
Voglio sapere di che tessuto deve essere un discorso per non fare neanche una piega
Alternativa ai pacchi di NLITE
MacBook & Canon Ixus 80
feboss è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
CO2 atmosferica a livello record nel 202...
Un portatile per i militari, ma con un o...
Discord, i messaggi di oltre 63.000 serv...
Nascosto nei meandri di Amazon, questo p...
Motorola Moto Buds 2 a 39,90€: prezzo di...
Due schede Raspberry Pi mai annunciate n...
Microfono gaming Yeti GX a 72,19€: -44% ...
PagoPA, false multe da 198 euro arrivano...
107,99€ su Amazon da stamattina: prezzo...
Cowboy Space Corp. presenta il suo razzo...
Per NetSuite il vantaggio nell'IA sta ne...
Scoperta la zona d'origine del segnale W...
La Stazione Spaziale Internazionale cont...
La Difesa statunitense ha pubblicato la ...
vivo X500 Pro e Pro Max ufficiali: tanta...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:08.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v