Qu'est-ce que < et > signifie, par exemple, implémente Comparable < BigInteger > ;?
-
19-08-2019 - |
Question
Dans Java 1.4.2 , classe java.math.BigInteger
implémente les interfaces Comparable
, Serializable
.
Dans Java 1.5.0 , classe java .math.BigInteger
implémente les interfaces Serializable
, Comparable < BigInteger >
.
Ceci est juste un exemple pour m'aider à poser des questions sur <
et >
. Ce que je me demande vraiment, ce sont les éléments <
et >
.
Ma question est triple:
- que signifie la partie
< BigInteger >
de l'instructionimplémente
? - comment appelle-t-on cette syntaxe?
- et que fait-il?
PS: il est très difficile de rechercher Google pour <
et >
et impossible de rechercher un fournisseur de services pour <
et > ;
en premier lieu.
Merci!
La solution
Lisez le Didacticiel sur les génériques Java . Ce qui se trouve entre les chevrons est un paramètre de type. Comparable est une classe générique. Dans ce cas, les chevrons signifient que la classe est comparable aux autres BigIntegers.
Pour plus de précisions dans ce cas, consultez le Javadocs pour Comparable dans 1.5. Notez qu'elle est déclarée comme Comparable < T >
et que la méthode compareTo
utilise un argument de type T
. Le T est un paramètre de type qui est "rempli". quand l'interface est utilisée. Ainsi, dans ce cas, déclarer que vous implémentez Comparable < BigInteger >
implique que vous devez disposer d'une méthode compareTo (BigInteger o)
. Une autre classe pourrait implémenter Comparable < String >
, ce qui signifie qu'elle devrait implémenter une méthode compareTo (String o)
.
J'espère que vous pourrez constater les avantages de l'extrait ci-dessus. En 1.4, la signature de compareTo
ne pouvait prendre qu'un objet Object
car toutes sortes de classes implémentaient Comparable et il était impossible de savoir exactement ce qui était nécessaire. Avec les génériques, cependant, vous pouvez spécifier que vous êtes comparable en ce qui concerne une classe particulière, puis écrire une méthode de comparaison plus spécifique qui prend uniquement cette classe en tant que paramètre.
Les avantages ici sont doubles. Tout d'abord, vous n'avez pas besoin d'effectuer une vérification instanceof
et un transtypage dans l'implémentation de votre méthode. Deuxièmement, le compilateur peut effectuer beaucoup plus de vérification de type au moment de la compilation - vous ne pouvez pas accidentellement passer une chaîne de caractères à quelque chose qui implémente Comparable < BigInteger >
, car les types ne correspondent pas. Il est bien mieux que le compilateur puisse vous le signaler, plutôt que de provoquer une exception d'exécution comme cela aurait été le cas avec du code non générique.
Autres conseils
Je suis presque sûr qu'il s'agit de génériques
http://java.sun.com /j2se/1.5.0/docs/guide/language/generics.html
J'ai demandé quelque chose de similaire (C #): il contient des informations utiles Que fait la méthode < ClassName > moyen?