metodo A Java chiamata può essere parametrizzata come nel codice seguente:Quando è utile una chiamata al metodo parametrizzata?
class Test
{
<T> void test()
{
}
public static void main(String[] args)
{
new Test().<Object>test();
// ^^^^^^^^
}
}
ho scoperto questo è possibile dalla finestra di impostazioni di Eclipse Java Formatter e mi chiedevo se ci sono dei casi in cui ciò è utile o necessario.
EDIT
Sulla base di risposta eccellente di Arne mi si avvicinò con la seguente conclusione:
Oltre a migliorare la sicurezza di tipo come esempio di Arne illustra una chiamata di metodo con parametri permette di specificare il tipo di base comune degli argomenti dei metodi che dovrebbero essere il tipo degli elementi del contenitore. Questo tipo viene normalmente inferito automaticamente dal compilatore al tipo di base comune più specifico. Parametrizzando la chiamata al metodo, questo comportamento può essere sovrascritto. Potrebbe essere necessaria una chiamata al metodo parametrizzata se sono presenti più tipi comuni inferiti dal compilatore.
Il seguente esempio dimostra che il comportamento:
import java.util.Arrays;
import java.util.List;
class Test
{
public static void main(String[] args)
{
Integer a=new Integer(0);
Long b=new Long(0);
List<Object> listError=Arrays.asList(a, b);
//error because Number&Comparable<?> is not Object
List<Object> listObj=Arrays.<Object>asList(a, b);
List<Number> listNum=Arrays.<Number>asList(a, b);
List<Comparable<?>> listCmp=Arrays.<Comparable<?>>asList(a, b);
}
}
Questo comportamento è definito nei paragrafi linguaggio Java Specification Terza edizione 8.4.4 e 15.12.2.7 ma non facilmente comprensibile.
Sono solo io a pensare che sia strano come tutti in questa discussione sembrino pensare che un "metodo parametrizzato" debba essere un metodo generico? Un metodo con parametri dichiarati è un metodo "parametrizzato". Un metodo generico è solo un altro metodo parametrizzato in cui il tipo è uno di questi parametri. O mi sono perso qualcosa? –
Sei perfetto! Con il senno di poi il titolo dovrebbe probabilmente essere stato "Quando è una chiamata di metodo con argomenti di tipo che non possono essere dedotti in modo utile?" –