logo

Pakaitos simboliai Java

„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(Listsąrašas)

kuo skiriasi megabaitas ir gigabaitas

Įgyvendinimas:

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

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

abėcėlė kaip skaičiai

Sintaksė: Kolekcijos tipas

Įgyvendinimas: 

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

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:

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

Išvestis
[1 2 3] [1.1 2.2 3.3]


Sukurti viktoriną