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(List extends Number>seznam)
java nit ustvari
Izvedba:
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; } }
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 extends Number>. 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: super A>.
sql izberite kot
Sintaksa: Vrsta zbirke super A>
Izvedba:
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); } }
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:
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); } }
Izhod
[1 2 3] [1.1 2.2 3.3]