Perché il tipo generico non può essere istanziato?

6

Ecco la mia domanda.

class Gen<T> {
    T ob;
    Gen() {
        ob = new T(); // Illegal!!!
    }
}

Perché è illegale? Potresti spiegarlo per favore.

    
posta alakhya 04.06.2016 - 19:40
fonte

1 risposta

14

Questo è impossibile a causa dei seguenti 2 motivi.

  1. Non è garantito che T abbia un costruttore no-args (e per questo non è un'interfaccia o una classe astratta)
  2. A causa della cancellazione dei caratteri (necessaria per la compatibilità con le versioni precedenti) il tipo di T è noto al momento della compilazione ma non in fase di esecuzione, quindi cosa non sarebbe noto a costruire.

Una risposta potrebbe essere quella di prendere una fabbrica T nel costruttore. Quindi Gen può richiedere nuovi Ts al suo contenuto cardiaco.

    
risposta data 04.06.2016 - 19:56
fonte

Leggi altre domande sui tag