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?
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.