Parametri di tipo limitato

3

Rif: link ,

Abbiamo il metodo: public <U extends Number> void inspect(U u)

Perché non può essere questo: public void inspect(Number n) ?

Raggiunge la stessa cosa, che senso ha usare i generici qui?

    
posta killjoy 29.03.2016 - 15:29
fonte

1 risposta

2

In questo caso , non vi è alcuna differenza: entrambi i metodi accettano lo stesso identico insieme di possibili input. In generale, quando il parametro type viene utilizzato una sola volta e come tipo di parametro non è necessario, i generici non aggiungono flessibilità che la sottotipizzazione non ha già fornito. E quando le due versioni sono equivalenti, dovresti preferire la versione non generica.

Tuttavia, ci sono molte situazioni in cui un tipo generico per un metodo generico è necessario e non può essere eliminato. Ad esempio:

  • Quando viene utilizzato in più posizioni, inclusa una volta come argomento di tipo in un parametro di tipo parametrico:

    public <T> void foo(List<T> x, T y)
    
  • Quando viene utilizzato in più posizioni, incluso come tipo di ritorno:

    public <T> T foo(T x)
    
  • O anche una sola volta come tipo di ritorno:

    public <T> List<T> foo()
    
  • Quando ha un limite ricorsivo:

    public <T extends Comparable<? super T>> foo(T x)
    
  • ecc.

risposta data 29.03.2016 - 23:48
fonte

Leggi altre domande sui tag