Dans Java Generics, les caractères génériques sont utilisés lorsque vous ne connaissez pas le type exact. Ils vous permettent d'écrire du code flexible et réutilisable. Le caractère générique est représenté par un ? (point d'interrogation). Les caractères génériques sont principalement utilisés dans les paramètres de méthode pour accepter différents types génériques en toute sécurité.
Types de caractères génériques en Java
1. Caractères génériques à limite supérieure
Ces caractères génériques peuvent être utilisés lorsque vous souhaitez assouplir les restrictions sur une variable. Par exemple, disons que vous souhaitez écrire une méthode qui fonctionne sur List< Integer >Liste< Double >et liste< Number >vous pouvez le faire en utilisant un caractère générique limité supérieur.
Pour déclarer un caractère générique de limite supérieure, utilisez le caractère générique ('?') suivi du mot-clé extends suivi de sa limite supérieure.
public static void add (Liste extends Number>liste)
convertir une chaîne en jsonobject java
Mise en œuvre:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Upper Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); System.out.println('Total sum is:' + sum(list1)); // Double list List<Double> list2 = Arrays.asList(4.1 5.1 6.1); System.out.print('Total sum is:' + sum(list2)); } private static double sum(List extends Number> list) { double sum = 0.0; for (Number i : list) { sum += i.doubleValue(); } return sum; } }
Sortir
Total sum is:22.0 Total sum is:15.299999999999999
Explication: Dans le programme ci-dessus, list1 contient des valeurs entières et list2 contient des valeurs doubles. Les deux sont transmis à la méthode sum qui utilise un caractère générique extends Number>. Cela signifie qu'il peut accepter n'importe quelle liste d'un type qui est une sous-classe de Number comme Integer ou Double.
2. Caractères génériques à limite inférieure
Il s'exprime à l'aide du caractère générique ('?') suivi du super mot-clé suivi de sa borne inférieure : super A>.
sinon en java
Syntaxe: Type de collection super A>
Mise en œuvre:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Lower Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list1); // Number list List<Number> list2 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list2); } public static void printOnlyIntegerClassorSuperClass( List super Integer> list) { System.out.println(list); } }
Sortir
[4 5 6 7] [4 5 6 7]
Explication: Ici, la méthode printOnlyIntegerClassorSuperClass accepte uniquement Integer ou ses superclasses (comme Number). Si vous essayez de transmettre une liste de Double, cela génère une erreur de compilation car Double n'est pas une superclasse d'Integer.
jeux d'images pour Android
Note: Utilisez le caractère générique d'extension lorsque vous souhaitez extraire des valeurs d'une structure et le caractère générique super lorsque vous placez des valeurs dans une structure. N'utilisez pas de caractère générique lorsque vous obtenez et placez des valeurs dans une structure. Vous pouvez spécifier une limite supérieure pour un caractère générique ou une limite inférieure, mais vous ne pouvez pas spécifier les deux.
3. Caractère générique illimité
Ce type de caractère générique est spécifié à l'aide du caractère générique (?), par exemple Liste. C'est ce qu'on appelle une liste de types inconnus. Ceux-ci sont utiles dans les cas suivants -
- Lors de l'écriture d'une méthode qui peut être utilisée à l'aide des fonctionnalités fournies dans la classe Object.
- Lorsque le code utilise des méthodes dans la classe générique qui ne dépendent pas du paramètre de type
Mise en œuvre:
Javaimport java.util.Arrays; import java.util.List; class unboundedwildcardemo { public static void main(String[] args) { // Integer List List<Integer> list1 = Arrays.asList(1 2 3); // Double list List<Double> list2 = Arrays.asList(1.1 2.2 3.3); printlist(list1); printlist(list2); } private static void printlist(List> list) { System.out.println(list); } }
Sortir
[1 2 3] [1.1 2.2 3.3]