logo

Aizstājējzīmes Java valodā

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 (sarakstssaraksts)

kas padara datoru ātru

Īstenošana:

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

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. 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:

atlasiet vairāku tabulu sql

Sintakse: Kolekcijas veids

Īstenošana: 

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

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:

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

Izvade
[1 2 3] [1.1 2.2 3.3]


Izveidojiet viktorīnu