Programmā Java Generics aizstājējzīmes tiek izmantotas, ja nezināt precīzu veidu. Tie ļauj rakstīt elastīgu un atkārtoti lietojamu kodu. Aizstājējzīmi apzīmē ar ? (jautājuma zīme). Aizstājējzīmes galvenokārt tiek izmantotas metodes parametros, lai droši pieņemtu dažādus vispārīgos veidus.
Java aizstājējzīmju veidi
1. Augšējās robežas aizstājējzīmes
Šīs aizstājējzīmes var izmantot, ja vēlaties atvieglot mainīgā lieluma ierobežojumus. Piemēram, sakiet, ka vēlaties uzrakstīt metodi, kas darbojas sarakstā< Integer >Saraksts< Double >un Saraksts< Number >to var izdarīt, izmantojot augšējo ierobežoto aizstājējzīmi.
Lai deklarētu aizstājējzīmi ar augšējo robežu, izmantojiet aizstājējzīmi ('?'), kam seko paplašinājuma atslēgvārds, kam seko tā augšējā robeža.
publiska statiska tukša pievienošana (saraksts extends Number>saraksts)
kas padara datoru ātru
Īstenošana:
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; } }
Izvade
Total sum is:22.0 Total sum is:15.299999999999999
Paskaidrojums: Iepriekš minētajā programmā list1 satur veselus skaitļus, bet sarakstā2 - dubultās vērtības. Abas tiek nodotas summas metodei, kas izmanto aizstājējzīmi extends Number>. Tas nozīmē, ka tas var pieņemt jebkuru tāda veida sarakstu, kas ir skaitļa apakšklase, piemēram, Vesels skaitlis vai Double.
2. Apakšējās robežas aizstājējzīmes
Tas tiek izteikts, izmantojot aizstājējzīmi ('?'), kam seko super atslēgvārds, kam seko tā apakšējā robeža: super A>.
atlasiet vairāku tabulu sql
Sintakse: Kolekcijas veids super A>
Īstenošana:
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); } }
Izvade
[4 5 6 7] [4 5 6 7]
Paskaidrojums: Šeit metode printOnlyIntegerClassorSuperClass pieņem tikai Integer vai tā virsklases (piemēram, Number). Ja mēģināt nodot Double sarakstu, tiek parādīta kompilēšanas laika kļūda, jo Double nav vesela skaitļa virsklase.
Piezīme: Izmantojiet paplašināto aizstājējzīmi, ja vēlaties iegūt vērtības no struktūras, un super aizstājējzīmi, kad struktūrā ievietojat vērtības. Neizmantojiet aizstājējzīmi, kad iegūstat un ievietojat vērtības struktūrā. Varat norādīt aizstājējzīmes augšējo robežu vai arī norādīt apakšējo robežu, bet nevarat norādīt abus.
3. Neierobežots aizstājējzīme
Šis aizstājējzīmes veids tiek norādīts, izmantojot aizstājējzīmi (?), piemēram, saraksts. To sauc par nezināmo veidu sarakstu. Tie ir noderīgi šādos gadījumos:
apļa plānošanas algoritms
- Rakstot metodi, kuru var izmantot, izmantojot Object klasē nodrošināto funkcionalitāti.
- Kad kods izmanto metodes vispārīgajā klasē, kas nav atkarīga no tipa parametra
Īstenošana:
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); } }
Izvade
[1 2 3] [1.1 2.2 3.3]