U Java Generics zamjenski znakovi se koriste kada ne znate točnu vrstu. Omogućuju vam pisanje fleksibilnog koda koji se može ponovno koristiti. Zamjenski znak predstavlja ? (znak pitanja). Zamjenski znakovi se uglavnom koriste u parametrima metode za sigurno prihvaćanje različitih generičkih tipova.
Vrste zamjenskih znakova u Javi
1. Gornje granice zamjenskih znakova
Ovi zamjenski znakovi mogu se koristiti kada želite ublažiti ograničenja na varijabli. Na primjer, recimo da želite napisati metodu koja radi na Listi< Integer >Popis< Double >i Popis< Number >to možete učiniti pomoću zamjenskog znaka s gornjom granicom.
Za deklaraciju zamjenskog znaka s gornjom granicom upotrijebite zamjenski znak ('?') nakon kojeg slijedi ključna riječ extends nakon koje slijedi njena gornja granica.
public static void add(List extends Number>popis)
linkedlist i arraylist
Implementacija:
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; } }
Izlaz
Total sum is:22.0 Total sum is:15.299999999999999
Obrazloženje: U gornjem programu list1 sadrži Integer vrijednosti, a list2 sadrži Double vrijednosti. Oba se prosljeđuju metodi zbroja koja koristi zamjenski znak extends Number>. To znači da može prihvatiti bilo koji popis tipa koji je podklasa broja kao što je Integer ili Double.
2. Zamjenski znakovi donje granice
Izražava se pomoću zamjenskog znaka ('?') iza kojeg slijedi ključna riječ super nakon koje slijedi donja granica: super A>.
java sortiranje oblačića
Sintaksa: Vrsta zbirke super A>
Implementacija:
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); } }
Izlaz
[4 5 6 7] [4 5 6 7]
Obrazloženje: Ovdje metoda printOnlyIntegerClassorSuperClass prihvaća samo Integer ili njegove superklase (kao što je Number). Ako pokušate proslijediti popis Double, javlja se pogreška u vremenu prevođenja jer Double nije nadklasa Integera.
Bilješka: Koristite prošireni zamjenski znak kada želite izvući vrijednosti iz strukture i super zamjenski znak kada stavljate vrijednosti u strukturu. Nemojte koristiti zamjenski znak kada dobivate i stavljate vrijednosti u strukturu. Možete navesti gornju granicu za zamjenski znak ili možete navesti donju granicu, ali ne možete navesti oboje.
3. Neograničeni zamjenski znak
Ova vrsta zamjenskog znaka navedena je pomoću zamjenskog znaka (?), na primjer Popis. Ovo se zove popis nepoznatih tipova. Oni su korisni u sljedećim slučajevima -
glavni program u Javi
- Kada pišete metodu koja se može koristiti korištenjem funkcionalnosti u klasi Object.
- Kada kod koristi metode u generičkoj klasi koja ne ovisi o parametru tipa
Implementacija:
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); } }
Izlaz
[1 2 3] [1.1 2.2 3.3]