Pages: [1]   Go Down
Print
Author Topic: Problema interfaccia ripetuta, sebbene diversa tramite templating...  (Read 1632 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.446


Più grande è la lotta, e più è glorioso il trionfo


WWW
« on: 03-09-2014, 03:32:41 »

Eccoci a una domanda veramente seria che pongo su Java.

Stavo programmando un bel po' di classi per un cosa complessa.

A un certo punto ho da ordinare due tipi di array.
Il primo array, chiamiamolo arrayA è di tipo TipoA [];
il secondo arra, chiamiamolo arrayB è di tipo TipoB [];

incidentalmente, TipoA extends TipoU ed anche TipoB extends TipoU, ove TipoU è una sovra-classe astratta (non istanziabile).

Adesso, per poter fare il confronto usando il metodo Arrays.sort (T[] a, Comparator<? super T> c), siccome mi seccavo a inventare due classi per fare due comparatori che agiscono comunque su classi diverse (che ne estendono una in comune), ho pensato di fare il tutto in un'unica classe, creando due metodi compare diversi (il metodo compare è previsto come obbligatorio dal contratto siglato con l'accettazione della implementazione dell'interfaccia Comparator), uno che accetta due oggetti di tipo TipoA e uno che accetta due oggetti di TipoB, così il binder dinamico non si confonderà quando dovrò usarne uno piuttosto che un'altro (le due classi non sono in parentela verticale fra loro).

Quindi ho scritto una classe del tipo
Code:
class mioComparatore implements Comparator<TipoA>, Comparator<TipoB> {
    int compare (TipoA o1, TipoA o2) {
        //... fa qualcosa e poi restituisce un intero
    }

    int compare (TipoB o1, TipoB o2) {
        //... fa qualcosa e poi restituisce un intero
    }
}
così onoro il patto siglato per le due interfacce Comparator.

Problema: il compilatore si lamenta di questo:
MioBelFile.java:12345: error: repeated interface
class mioComparatore implements Comparator<TipoA>, Comparator<TipoB> {
                                                             ^


Considerato che i due Comparator sono stati specializzati tramite templating in due diverse interfacce, seppur con nome (senza template) comune, non dovrebbero essere trattati come interfacce diverse?

Mi seccherei davvero tanto a dover implementare Comparator<TipoU> e poi dovermi mettere a controllare manualmente se i tipi dei dati TipoU passati sono TipoA o TipoB (anche perché non possono essere altro, visto che TipoU è astratta), per una questione di eleganza del codice e di logica di ciò che volevo fare (sebbene possa essere un rognoso walk-around)...

Suggerimenti? Spiegazioni?
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pages: [1]   Go Up
Print
Jump to: