logo

Zástupné znaky v Javě

V Java Generics se zástupné znaky používají, když neznáte přesný typ. Umožňují vám psát flexibilní a opakovaně použitelný kód. Zástupný znak je reprezentován ? (otazník). Zástupné znaky se používají hlavně v parametrech metod k bezpečnému přijetí různých generických typů.

Typy zástupných znaků v Javě

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

Tyto zástupné znaky lze použít, když chcete uvolnit omezení pro proměnnou. Řekněme například, že chcete napsat metodu, která funguje na Seznam< Integer >Seznam< Double >a Seznam< Number >můžete to provést pomocí zástupného znaku s horní hranicí. 

Chcete-li deklarovat zástupný znak s horní hranicí, použijte zástupný znak ('?') následovaný klíčovým slovem extends následovaným jeho horní hranicí. 



public static void add(Seznamseznam)

Panel nástrojů rychlého přístupu ms word

Implementace:

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

Vysvětlení: Ve výše uvedeném programu list1 obsahuje celočíselné hodnoty a seznam2 obsahuje hodnoty Double. Oba jsou předány metodě součtu, která používá zástupný znak. To znamená, že může přijmout jakýkoli seznam typu, který je podtřídou čísla jako Integer nebo Double.

2. Dolní ohraničené zástupné znaky

Vyjadřuje se pomocí zástupného znaku ('?'), za kterým následuje klíčové slovo super následované jeho spodní hranicí:

funkce podřetězec java

Syntax: Typ sbírky

Implementace: 

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]

Vysvětlení: Zde metoda printOnlyIntegerClassorSuperClass akceptuje pouze Integer nebo jeho nadtřídy (jako Number). Pokud se pokusíte předat seznam Double, zobrazí se chyba při kompilaci, protože Double není nadtřídou třídy Integer.

Poznámka: Použijte zástupný znak rozšíření, když chcete získat hodnoty ze struktury, a super zástupný znak, když do struktury vkládáte hodnoty. Při získávání a vkládání hodnot do struktury nepoužívejte zástupný znak. Můžete zadat horní hranici pro zástupný znak nebo můžete zadat dolní hranici, ale nemůžete zadat obojí.

3. Neohraničený zástupný znak

Tento typ zástupného znaku je určen pomocí zástupného znaku (?), například Seznam. Toto se nazývá seznam neznámých typů. Jsou užitečné v následujících případech -

dobový klíč
  • Při psaní metody, kterou lze použít pomocí funkce poskytované ve třídě Object.
  • Když kód používá metody v obecné třídě, která nezávisí na parametru typu

Implementace:

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]


Vytvořit kvíz