156 votes

T génériques Java vs objet

Je me demandais quelle est la différence entre les deux déclarations de méthode suivantes :

public Object doSomething(Object obj) {....}

public <T> T doSomething(T t) {....}

Y a-t-il quelque chose que vous pouvez/feriez avec l'un mais pas l'autre ? Je n'ai pas pu trouver cette question ailleurs sur ce site.

16voto

user1883212 Points 756

La différence est qu'avec les méthodes génériques, je n'ai pas besoin de lancer et je reçois une erreur de compilation quand je fais mal :

public class App {

    public static void main(String[] args) {

        String s = process("vv");
        String b = process(new Object()); // Compilation error
    }

    public static <T> T process(T val) {

        return val;
    }
}

En utilisant l'objet, j'ai toujours besoin de lancer et je ne reçois aucune erreur quand je fais mal :

public class App {

    public static void main(String[] args) {

        String s = (String)process("vv");
        String b = (String)process(new Object());
    }

    public static Object process(Object val) {

        return val;
    }
}

3voto

Andrey Adamovich Points 9404

Vous n'avez pas besoin de faire de casting supplémentaire. Dans le premier cas, vous obtiendrez toujours un objet de classe java.lang.Object que vous aurez besoin de lancer à votre classe. Dans le second cas, T sera remplacé par la classe définie dans la signature générique et aucun moulage de classe ne sera nécessaire.

2voto

Jonathan Points 1458

Au moment de l'exécution, rien. Mais au moment de la compilation, la seconde effectuera une vérification de type pour s'assurer que le type du paramètre et le type de la valeur de retour correspondent (ou sont des sous-types de) quel que soit le type auquel T se résout (le premier exemple effectue également une vérification de type, mais chaque objet est un sous-type d'objet, de sorte que chaque type sera accepté).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X