A Java Genericsben a helyettesítő karaktereket akkor használjuk, ha nem ismerjük a pontos típust. Lehetővé teszik rugalmas és újrafelhasználható kód írását. A helyettesítő karaktert egy ? (kérdőjel). A helyettesítő karaktereket főként a metódusparaméterekben használják a különböző általános típusok biztonságos elfogadására.
A Java helyettesítő karaktereinek típusai
1. Felső korlátos helyettesítő karakterek
Ezeket a helyettesítő karaktereket akkor használhatjuk, ha enyhíteni szeretnénk egy változóra vonatkozó korlátozásokat. Tegyük fel például, hogy egy listán működő metódust szeretne írni< Integer >Lista< Double >és List< Number >ezt felső korlátos helyettesítő karakter használatával teheti meg.
A felső határú helyettesítő karakter deklarálásához használja a helyettesítő karaktert ('?'), majd az extends kulcsszót, majd a felső korlátot.
public static void add(List extends Number>lista)
javafx napfogyatkozáskor
Végrehajtás:
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; } }
Kimenet
Total sum is:22.0 Total sum is:15.299999999999999
Magyarázat: A fenti programban a list1 Integer értékeket, a list2 pedig a Double értékeket tartalmazza. Mindkettő az összeg metódushoz kerül, amely helyettesítő karaktert használ extends Number>. Ez azt jelenti, hogy bármilyen típusú listát el tud fogadni, amely a szám alosztálya, például egész vagy kettős.
2. Alsó korlátos helyettesítő karakterek
Ezt a helyettesítő karakter ('?') használatával fejezi ki, amelyet a szuper kulcsszó követ, majd az alsó korlát: super A>.
mátrixok a c programozásban
Szintaxis: Gyűjteménytípus super A>
Végrehajtás:
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); } }
Kimenet
[4 5 6 7] [4 5 6 7]
Magyarázat: Itt a printOnlyIntegerClassorSuperClass metódus csak egész számot vagy szuperosztályait (például a számot) fogadja el. Ha megpróbálja átadni a Double listát, az fordítási idejű hibát ad, mivel a Double nem az egész számok szuperosztálya.
folytatási adattípusok
Jegyzet: Használja a kiterjesztett helyettesítő karaktert, ha értékeket szeretne kihozni egy struktúrából, és szuper helyettesítő karaktert, ha értékeket helyez el egy struktúrába. Ne használjon helyettesítő karaktert, amikor értékeket kap és helyez be egy szerkezetbe. Megadhat felső korlátot a helyettesítő karakterekhez, vagy megadhat alsó korlátot, de mindkettőt nem.
3. Korlátlan helyettesítő karakter
Ez a helyettesítő karakter típus a helyettesítő karakter (?) használatával van megadva, például Lista. Ezt ismeretlen típusok listájának nevezzük. Ezek a következő esetekben hasznosak:
- Amikor olyan metódust írunk, amely az Object osztályban biztosított funkciókkal használható.
- Amikor a kód olyan metódusokat használ az általános osztályban, amelyek nem függenek a típusparamétertől
Végrehajtás:
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); } }
Kimenet
[1 2 3] [1.1 2.2 3.3]