Classi parametriche e metodo equals

di il
2 risposte

Classi parametriche e metodo equals

Buonasera,
per favore qualcuno potrebbe aiutarmi con questo metodo?

Overriding del metodo equals di una classe parametrica?

class Prova <T>{
private T min;

//Costruttore
public Prova(T min)
{this.min=min;}


public T getMin() {return min;}

public boolean equals (Object x) {
if (x == null)
if (!(x instanceof Prova<T>)) return false; //ERRORE
Prova<T> y= (Prova<T>) x; //ERRORE
return this.getMin().equals(y.getMin());
}
}

da errore nel cast e nel controllo instanceof

Grazie

2 Risposte

  • Re: Classi parametriche e metodo equals

    AlexNapoli ha scritto:


    da errore nel cast e nel controllo instanceof
    Il cast (Prova<T>) non è un errore ... è un warning di "unchecked cast", perché il compilatore non può provare a priori che l'oggetto sia di tipo Prova<T> (può provare solo che l'oggetto è di tipo Prova, non di tipo Prova<T>).

    L'uso di Prova<T> nel instanceof invece sì, è un errore. Il tipo a destra del instanceof deve (ripeto, deve) essere un tipo che in inglese si dice reifiable ("reificabile" in italiano), ovvero completamente rappresentato a runtime. Mentre Prova<T> per definizione dei generics non lo è.

    Comunque, per far funzionare il tutto (e senza warning/errori) nel equals, è sufficiente usare Prova<?> sia nel instanceof che nel cast (e ovviamente nel tipo di y). Prova<?>, sempre per definizione dei generics, è reifiable. Ma ti permette di estrarre il min solo vedendolo come Object. Ma questo è sufficiente per farci il equals con un altro min.
  • Re: Classi parametriche e metodo equals

    Grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte