logo

Caractères génériques en Java

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 (Listeliste)

convertir une chaîne en jsonobject java

Mise en œuvre:

Java
import 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. 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 :

sinon en java

Syntaxe: Type de collection

Mise en œuvre: 

Java
import 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:

Java
import 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]


Créer un quiz