Un Java appel de méthode peut être paramétrés comme dans le code suivant:Quand un appel de méthode paramétré est-il utile?
class Test
{
<T> void test()
{
}
public static void main(String[] args)
{
new Test().<Object>test();
// ^^^^^^^^
}
}
J'ai découvert cela est possible à partir des paramètres Eclipse Java Formatter dialogue et je me demandais s'il y a des cas où cela est utile ou nécessaire.
EDIT
Basé sur une excellente réponse de Arne je suis venu à la conclusion suivante:
En plus d'améliorer la sécurité de type que l'exemple de Arne illustre un appel de méthode paramétrés vous permet de spécifier le type de base commun des arguments méthodes qui devrait être le type des éléments du conteneur. Ce type est normalement déduit automatiquement par le compilateur au type de base commun le plus spécifique. En paramétrant l'appel de la méthode, ce comportement peut être surchargé. Un appel de méthode paramétrée peut être requis s'il existe plusieurs types communs inférés par le compilateur.
L'exemple suivant montre que le comportement:
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);
}
}
Ce comportement est défini dans la spécification du langage Java Troisième édition paragraphes 8.4.4 et 15.12.2.7, mais pas facile à comprendre.
Est-ce seulement moi qui pense que c'est bizarre que tout le monde dans ce fil semble penser qu'une "méthode paramétrée" doit être une méthode générique? Une méthode qui a des paramètres déclarés est une méthode "paramétrée". Une méthode générique est juste une autre méthode paramétrée où le type est un de ces paramètres. Ou ai-je manqué quelque chose? –
Vous êtes sur! Avec le recul, le titre aurait probablement dû être "Quand est un appel de méthode avec des arguments de type qui ne peuvent être déduits utiles?" –