У Јава Генерицс замјенски знакови се користе када не знате тачан тип. Омогућавају вам писање флексибилног кода за вишекратну употребу. Замјенски знак је представљен са ? (знак питања). Заложни знакови се углавном користе у параметрима метода за безбедно прихватање различитих генеричких типова.
Врсте џокер знакова у Јави
1. Горње ограничени џокери
Ови џокер знакови се могу користити када желите да ублажите ограничења на променљиву. На пример, реците да желите да напишете метод који ради на Листи< Integer >Лист< Double >и Лист< Number >то можете учинити помоћу горње ограниченог џокера.
Да бисте декларисали џокер знак са горњим границама, користите џокер знак ('?') иза којег следи кључна реч ектендс и њена горња граница.
публиц статиц воид адд (Листа extends Number>листа)
рујира банерјее
Имплементација:
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; } }
Излаз
Total sum is:22.0 Total sum is:15.299999999999999
Објашњење: У горњем програму лист1 садржи вредности Интегер, а лист2 садржи Доубле вредности. Оба се прослеђују методу збира који користи џокер знак extends Number>. То значи да може прихватити било коју листу типа која је подкласа броја као што је Интегер или Доубле.
2. Ловер Боундед Вилдцардс
Изражава се помоћу џокер знака ('?') иза којег следи кључна реч супер иза које следи њена доња граница: super A>.
конверзија јава стринга у инт
Синтакса: Цоллецтионтипе super A>
Имплементација:
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); } }
Излаз
[4 5 6 7] [4 5 6 7]
Објашњење: Овде метода принтОнлиИнтегерЦлассорСуперЦласс прихвата само Интегер или његове суперкласе (као Нумбер). Ако покушате да проследите листу Доубле, то даје грешку у времену компајлирања јер Доубле није суперкласа Интегер.
јава мултитхреадинг
Напомена: Користите џокер знак проширења када желите да извучете вредности из структуре и супер џокер када ставите вредности у структуру. Немојте користити џокер када добијете и ставите вредности у структуру. Можете одредити горњу границу за џокер или можете одредити доњу границу, али не можете навести оба.
3. Унбоундед Вилдцард
Овај тип џокер знака је наведен помоћу џокер знака (?), на пример Листа. Ово се зове листа непознатих типова. Они су корисни у следећим случајевима -
- Када пишете метод који се може користити коришћењем функционалности обезбеђене у класи Објецт.
- Када код користи методе у генеричкој класи то не зависи од параметра типа
Имплементација:
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); } }
Излаз
[1 2 3] [1.1 2.2 3.3]