„Java Generics“ pakaitos simboliai naudojami, kai nežinote tikslaus tipo. Jie leidžia rašyti lankstų ir daugkartinio naudojimo kodą. Pakaitos simbolis žymimas ? (klaustukas). Pakaitos simboliai dažniausiai naudojami metodo parametruose, kad būtų galima saugiai priimti skirtingus bendruosius tipus.
Pakaitos simbolių tipai Java
1. Viršutinės ribos pakaitos simboliai
Šiuos pakaitos simbolius galima naudoti, kai norite sušvelninti kintamojo apribojimus. Pavyzdžiui, tarkime, kad norite parašyti metodą, kuris veikia sąraše< Integer >Sąrašas< Double >ir Sąrašas< Number >tai galite padaryti naudodami viršutinę ribinę pakaitos ženklą.
Norėdami paskelbti viršutinės ribos pakaitos simbolį, naudokite pakaitos simbolį („?“), po kurio seka išplėstinis raktinis žodis ir jo viršutinė riba.
public static void add(List extends Number>sąrašas)
kuo skiriasi megabaitas ir gigabaitas
Įgyvendinimas:
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; } }
Išvestis
Total sum is:22.0 Total sum is:15.299999999999999
Paaiškinimas: Aukščiau pateiktoje programoje list1 turi sveikųjų skaičių reikšmes, o list2 - dvigubas reikšmes. Abu perduodami sumos metodui, kuris naudoja pakaitos simbolį extends Number>. Tai reiškia, kad jis gali priimti bet kokį tipo sąrašą, kuris yra skaičiaus poklasis, pvz., Integer arba Double.
2. Apatinės ribos pakaitos simboliai
Jis išreiškiamas naudojant pakaitos simbolį („?“), po kurio nurodomas super raktinis žodis ir jo apatinė riba: super A>.
abėcėlė kaip skaičiai
Sintaksė: Kolekcijos tipas super A>
Įgyvendinimas:
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); } }
Išvestis
[4 5 6 7] [4 5 6 7]
Paaiškinimas: Čia metodas printOnlyIntegerClassorSuperClass priima tik sveikąjį skaičių arba jo superklases (pvz., Skaičius). Jei bandote perduoti „Double“ sąrašą, pateikiama kompiliavimo laiko klaida, nes „Double“ nėra sveikųjų skaičių superklasė.
konvertuoti eilutę į jsonobject java
Pastaba: Naudokite išplėstinį pakaitos simbolį, kai norite ištraukti reikšmes iš struktūros, ir super pakaitos simbolį, kai įdedate reikšmes į struktūrą. Nenaudokite pakaitos simbolių, kai gaunate ir įdedate vertes į struktūrą. Galite nurodyti viršutinę pakaitos simbolio ribą arba galite nurodyti apatinę ribą, bet negalite nurodyti abiejų.
3. Neribotas pakaitos simbolis
Šis pakaitos simbolio tipas nurodomas naudojant pakaitos simbolį (?), pavyzdžiui, sąrašas. Tai vadinama nežinomų tipų sąrašu. Tai naudinga šiais atvejais:
- Rašant metodą, kurį galima panaudoti naudojant Object klasėje pateiktas funkcijas.
- Kai kodas naudoja bendrosios klasės metodus, kurie nepriklauso nuo tipo parametro
Įgyvendinimas:
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); } }
Išvestis
[1 2 3] [1.1 2.2 3.3]