logo

Symbole wieloznaczne w Javie

W języku Java Generics symbole wieloznaczne są używane, jeśli nie znasz dokładnego typu. Umożliwiają pisanie elastycznego i wielokrotnego użytku kodu. Symbol wieloznaczny jest reprezentowany przez ? (znak zapytania). Symbole wieloznaczne są używane głównie w parametrach metod w celu bezpiecznego akceptowania różnych typów ogólnych.

Rodzaje symboli wieloznacznych w Javie

1. Symbole wieloznaczne z górnym ograniczeniem

Tych symboli wieloznacznych można użyć, gdy chcesz złagodzić ograniczenia dotyczące zmiennej. Załóżmy na przykład, że chcesz napisać metodę działającą na liście< Integer >Lista< Double >i Lista< Number >możesz to zrobić za pomocą symbolu wieloznacznego ograniczonego górną krawędzią. 

Aby zadeklarować symbol wieloznaczny z górną granicą, użyj znaku wieloznacznego („?”), po którym następuje słowo kluczowe Extends i górna granica. 



public static void add (Listlista)

menu ustawień Androida

Realizacja:

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

Wyjście
Total sum is:22.0 Total sum is:15.299999999999999

Wyjaśnienie: W powyższym programie lista1 zawiera wartości typu Integer, a lista2 zawiera wartości typu Double. Obydwa są przekazywane do metody sum, która wykorzystuje symbol wieloznaczny. Oznacza to, że może zaakceptować dowolną listę typu będącego podklasą Number, na przykład Integer lub Double.

2. Dolne symbole wieloznaczne

Wyraża się go za pomocą znaku wieloznacznego („?”), po którym następuje słowo kluczowe super i jego dolna granica:

ciąg do json Java

Składnia: Typ kolekcji

Realizacja: 

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

Wyjście
[4 5 6 7] [4 5 6 7]

Wyjaśnienie: Tutaj metoda printOnlyIntegerClassorSuperClass akceptuje tylko liczbę Integer lub jej nadklasy (takie jak Number). Próba przekazania listy Double powoduje błąd kompilacji, ponieważ Double nie jest nadklasą Integer.

mnożenie macierzy w c

Notatka: Użyj rozszerzenia symbolu wieloznacznego, jeśli chcesz uzyskać wartości ze struktury, i super symbolu wieloznacznego, gdy umieszczasz wartości w strukturze. Nie używaj symboli wieloznacznych, gdy pobierasz i umieszczasz wartości w strukturze. Można określić górną granicę symbolu wieloznacznego lub dolną granicę, ale nie można określić obu.

3. Nieograniczona karta wieloznaczna

Ten typ symbolu wieloznacznego jest określany za pomocą znaku wieloznacznego (?), na przykład Lista. Nazywa się to listą nieznanych typów. Są one przydatne w następujących przypadkach:

  • Podczas pisania metody, którą można zastosować wykorzystując funkcjonalność udostępnioną w klasie Object.
  • Gdy kod używa metod w klasie ogólnej, która nie zależy od parametru typu

Realizacja:

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

Wyjście
[1 2 3] [1.1 2.2 3.3]


Utwórz quiz