logo

Nadomestni znaki v Javi

V Java Generics se nadomestni znaki uporabljajo, ko ne poznate točne vrste. Omogočajo vam pisanje prilagodljive in večkrat uporabne kode. Nadomestni znak je predstavljen z ? (vprašaj). Nadomestni znaki se večinoma uporabljajo v parametrih metode za varno sprejemanje različnih generičnih tipov.

Vrste nadomestnih znakov v Javi

1. Zgornje meje nadomestnih znakov

Te nadomestne znake lahko uporabite, ko želite sprostiti omejitve za spremenljivko. Na primer, recimo, da želite napisati metodo, ki deluje na seznamu< Integer >Seznam< Double >in Seznam< Number >to lahko storite z uporabo zgoraj omejenega nadomestnega znaka. 

Za deklaracijo zgoraj omejenega nadomestnega znaka uporabite nadomestni znak ('?'), ki mu sledi ključna beseda extends, ki ji sledi zgornja meja. 



public static void add(Listseznam)

java nit ustvari

Izvedba:

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

Izhod
Total sum is:22.0 Total sum is:15.299999999999999

Pojasnilo: V zgornjem programu seznam1 vsebuje celoštevilske vrednosti, seznam2 pa dvojne vrednosti. Oba sta posredovana metodi vsote, ki uporablja nadomestni znak. To pomeni, da lahko sprejme kateri koli seznam vrste, ki je podrazred Number, kot je Integer ali Double.

2. Spodaj omejeni nadomestni znaki

Izražen je z nadomestnim znakom ('?'), ki mu sledi ključna beseda super, ki ji sledi spodnja meja:

sql izberite kot

Sintaksa: Vrsta zbirke

Izvedba: 

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

Izhod
[4 5 6 7] [4 5 6 7]

Pojasnilo: Tukaj metoda printOnlyIntegerClassorSuperClass sprejme samo Integer ali njegove nadrazrede (kot je Number). Če poskusite posredovati seznam Double, povzroči napako v času prevajanja, ker Double ni nadrazred Integer.

vračanje nizov v javi

Opomba: Uporabite razširjeni nadomestni znak, ko želite pridobiti vrednosti iz strukture, in super nadomestni znak, ko v strukturo postavite vrednosti. Ne uporabljajte nadomestnih znakov, ko dobite in vstavite vrednosti v strukturo. Določite lahko zgornjo mejo za nadomestni znak ali pa spodnjo mejo, ne morete pa podati obojega.

3. Neomejen nadomestni znak

Ta tip nadomestnega znaka je določen z uporabo nadomestnega znaka (?), na primer Seznam. To se imenuje seznam neznanih tipov. Ti so uporabni v naslednjih primerih -

  • Pri pisanju metode, ki jo je mogoče uporabiti s funkcionalnostjo, ki je na voljo v razredu Object.
  • Ko koda uporablja metode v splošnem razredu, ki ni odvisen od parametra tipa

Izvedba:

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

Izhod
[1 2 3] [1.1 2.2 3.3]


Ustvari kviz