В Java Generics заместващите знаци се използват, когато не знаете точния тип. Те ви позволяват да пишете гъвкав и многократно използваем код. Заместващият знак е представен от ? (въпросителен знак). Заместващите символи се използват главно в параметрите на метода за безопасно приемане на различни генерични типове.
Видове заместващи знаци в Java
1. Заместващи символи с горна граница
Тези заместващи символи могат да се използват, когато искате да намалите ограниченията върху променлива. Например кажете, че искате да напишете метод, който работи на List< Integer >списък< Double >и списък< Number >можете да направите това, като използвате заместващ знак с горна граница.
За да декларирате заместващ знак с горна граница, използвайте заместващия символ ('?'), последван от ключовата дума extends, последвана от нейната горна граница.
public static void add(List extends Number>списък)
java булев низ
Изпълнение:
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
Обяснение: В горната програма list1 съдържа Integer стойности, а list2 съдържа Double стойности. И двете се предават на метода на сумата, който използва заместващ знак extends Number>. Това означава, че може да приеме всеки списък от тип, който е подклас на Number като Integer или Double.
2. Заместващи символи с долна граница
Изразява се с помощта на заместващия знак ('?'), последван от ключовата дума super, последвана от нейната долна граница: super A>.
js глобална променлива
Синтаксис: Тип колекция 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]
Обяснение: Тук методът printOnlyIntegerClassorSuperClass приема само Integer или неговите суперкласове (като Number). Ако се опитате да подадете списък с Double, това дава грешка по време на компилиране, защото Double не е суперклас на Integer.
знак към int java
Забележка: Използвайте заместващ знак за разширение, когато искате да извлечете стойности от структура, и супер заместващ знак, когато поставяте стойности в структура. Не използвайте заместващ знак, когато получавате и поставяте стойности в структура. Можете да посочите горна граница за заместващ знак или можете да посочите долна граница, но не можете да посочите и двете.
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]