Quand un appel de méthode paramétré est-il utile?

Une méthode en Java appel peut être paramétrée comme dans le code suivant:

class Test
{
    <T> void test()
    {
    }

    public static void main(String[] args)
    {
        new Test().<Object>test();
        //        ^^^^^^^^
    }
}

J'ai trouvé que c'est possible à partir de l'Eclipse Java Formateur de dialogue paramètres et je me demandais si il existe tous les cas où cela est utile ou nécessaire.


MODIFIER

Basé sur Arne excellente réponse, je suis venu à la conclusion suivante:

En plus de l'amélioration de la sécurité de type comme Arne de l'illustre l'exemple paramétrée appel de méthode vous permet de spécifier la commune type de base des méthodes d'arguments qui devraient être le type de conteneur éléments. Ce type est normalement inferenced automatiquement par le compilateur pour le plus spécifique de la commune type de base. Le paramétrage de l'appel de méthode ce comportement peut être substituée. Un paramétrée à l'appel de la méthode peut être nécessaire s'il y a plusieurs types communs inferenced 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 Le Langage Java Spécification de la Troisième Édition des paragraphes 8.4.4 et 15.12.2.7 mais pas facile à comprendre.

source d'informationauteur Johann-Christoph Jacob