logo

Zástupné znaky v jazyku Java

V Java Generics sa zástupné znaky používajú, keď nepoznáte presný typ. Umožňujú vám písať flexibilný a opakovane použiteľný kód. Zástupný znak je reprezentovaný ? (otáznik). Zástupné znaky sa používajú hlavne v parametroch metódy na bezpečné akceptovanie rôznych generických typov.

Typy zástupných znakov v jazyku Java

1. Horné ohraničené zástupné znaky

Tieto zástupné znaky možno použiť, keď chcete uvoľniť obmedzenia premennej. Povedzme napríklad, že chcete napísať metódu, ktorá funguje na zozname< Integer >Zoznam< Double >a Zoznam< Number >môžete to urobiť pomocou zástupného znaku s hornou hranicou. 

Ak chcete deklarovať zástupný znak s hornou hranicou, použite zástupný znak ('?'), za ktorým nasleduje kľúčové slovo extends, za ktorým nasleduje jeho horná hranica. 



public static void add(Zoznamzoznam)

abs c kód

Implementácia:

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;  } } 

Výstup
Total sum is:22.0 Total sum is:15.299999999999999

Vysvetlenie: Vo vyššie uvedenom programe list1 obsahuje celočíselné hodnoty a zoznam2 obsahuje hodnoty Double. Obidve sa prenesú do metódy súčtu, ktorá používa zástupný znak. To znamená, že môže akceptovať akýkoľvek zoznam typu, ktorý je podtriedou čísla, ako je Integer alebo Double.

2. Nižšie ohraničené zástupné znaky

Vyjadruje sa pomocou zástupného znaku ('?'), za ktorým nasleduje super kľúčové slovo, za ktorým nasleduje jeho spodná hranica:

funkcia podreťazca java

Syntax: Typ kolekcie

Implementácia: 

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);  } } 

Výstup
[4 5 6 7] [4 5 6 7]

Vysvetlenie: Metóda printOnlyIntegerClassorSuperClass tu akceptuje iba celé číslo alebo jeho nadtriedy (ako Number). Ak sa pokúsite odovzdať zoznam Double, zobrazí sa chyba pri kompilácii, pretože Double nie je nadtriedou triedy Integer.

reťazec ti int

Poznámka: Použite rozšíriť zástupný znak, keď chcete získať hodnoty zo štruktúry, a super zástupný znak, keď vložíte hodnoty do štruktúry. Pri získavaní a vkladaní hodnôt do štruktúry nepoužívajte zástupný znak. Môžete zadať hornú hranicu pre zástupný znak alebo môžete zadať dolnú hranicu, ale nemôžete zadať oboje.

3. Neobmedzený zástupný znak

Tento typ zástupného znaku je špecifikovaný pomocou zástupného znaku (?), napríklad Zoznam. Toto sa nazýva zoznam neznámych typov. Sú užitočné v nasledujúcich prípadoch -

  • Pri písaní metódy, ktorú možno použiť pomocou funkcionality poskytovanej v triede Object.
  • Keď kód používa metódy vo generickej triede, ktorá nezávisí od parametra typu

Implementácia:

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);  } } 

Výstup
[1 2 3] [1.1 2.2 3.3]


Vytvoriť kvíz