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 (List extends Number>lista)
menu ustawień Androida
Realizacja:
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; } }
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 extends Number>. 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: super A>.
ciąg do json Java
Składnia: Typ kolekcji super A>
Realizacja:
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); } }
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:
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); } }
Wyjście
[1 2 3] [1.1 2.2 3.3]