Maison  >  Article  >  Java  >  Objet, T (génériques) et leurs différences en Java

Objet, T (génériques) et leurs différences en Java

怪我咯
怪我咯original
2017-06-30 10:40:411374parcourir

L'éditeur suivant vous apportera une discussion détaillée des différences entre Object, T (générique) et ? L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil

Parce que j'ai récemment relu les génériques et lu quelques réflexions, j'ai des doutes sur Object, T (ci-après dénommés génériques), et ?.

Essayons d'abord de comprendre la Classe Object Quiconque étudie Java doit savoir que Object est la classe parent de toutes les classes Remarque : cela signifie alors The. la gamme est très large ! Tout d'abord, rappelez-vous ceci, si votre type de paramètre est Objet, alors le type de paramètre sera très large !

"Penser en Java" dit que de nombreuses raisons ont contribué à l'émergence des génériques, et l'une des raisons les plus frappantes est la création de classes conteneurs. Comment comprendre cela ? Je crois comprendre que vous pouvez mettre cela de côté afin de créer des classes de conteneurs et revenir au but des génériques pour limiter un certain type.

Nous pouvons donc maintenant résumer les deux différences importantes entre Objet et T :

L'objet a une plage très large, tandis que T part d'un Ce type sera qualifié dès le début (notamment qu'il peut être limité au type Objet).

L'objet forcera la conversion de type car c'est la classe parent de toutes les classes, et T a limité certaines spécificités depuis le début lors du codage (notez que lors de l'écriture du code), donc ce n'est pas le cas ça ne nécessite pas de casting. (La raison pour laquelle nous devrions insister lors de l'écriture du code est que les génériques seront effacés par la JVM dans la machine virtuelle. Ses informations de type spécifiques peuvent être référencées aux génériques, qui ne seront pas étendues ici).

Par exemple, la classe List dans jdk est une classe générique. Nous précisons maintenant que son type est Object.

List<Object> list = new ArrayList<Object>();
int i = 0;
String s = "s";
list.add(i);
list.add(s);

La liste elle-même est une classe générique. Nous précisons maintenant qu'elle reçoit des paramètres de type Objet. À ce stade, vous pouvez y mettre n'importe quel type de paramètres, et lorsque vous la supprimez, vous devez. effectuer une conversion de type forcée vers un type spécifique.

Maintenant, si nous spécifions la liste pour recevoir les paramètres de type String, alors cette liste ne peut être placée qu'en type String, et il n'est pas nécessaire d'effectuer une conversion de type cast lors de sa suppression.

L'inspiration que cela nous apporte est que lors de l'écriture d'une classe comme List, nous devons faire attention à l'opportunité d'utiliser des génériques. Assurez-vous d'écrire des cours plus génériques, de discuter davantage et de mieux comprendre, sinon ils risquent encore de se confondre.

Suivi de ?, ceci peut être utilisé lorsqu'il faut utiliser la réflexion pour obtenir le type Class. Son explication est : recevoir un type incertain, qui est un peu la même que Object. D'après ce que je comprends, si vous utilisez uniquement "?", alors c'est la même chose qu'Object, mais "?" a une utilisation légèrement plus "avancée" que Object, c'est-à-dire qu'il peut réduire une plage incertaine et utiliser quelque chose comme "?" extends Test", ce qui signifie que seule la classe héritée qui reçoit la classe Test est acceptée. La portée est-elle plus petite que celle d'Object ?

Ce qui précède représente les différences entre Object, T et ?. Écrivez quelques lignes de code supplémentaires, faites plus d'expériences et discutez davantage, et vous saurez quand et où l'utiliser de manière appropriée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn