logo

Заместващи символи в Java

В Java Generics заместващите знаци се използват, когато не знаете точния тип. Те ви позволяват да пишете гъвкав и многократно използваем код. Заместващият знак е представен от ? (въпросителен знак). Заместващите символи се използват главно в параметрите на метода за безопасно приемане на различни генерични типове.

Видове заместващи знаци в Java

1. Заместващи символи с горна граница

Тези заместващи символи могат да се използват, когато искате да намалите ограниченията върху променлива. Например кажете, че искате да напишете метод, който работи на List< Integer >списък< Double >и списък< Number >можете да направите това, като използвате заместващ знак с горна граница. 

За да декларирате заместващ знак с горна граница, използвайте заместващия символ ('?'), последван от ключовата дума extends, последвана от нейната горна граница. 



public static void add(Listсписък)

java булев низ

Изпълнение:

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

Изход
Total sum is:22.0 Total sum is:15.299999999999999

Обяснение: В горната програма list1 съдържа Integer стойности, а list2 съдържа Double стойности. И двете се предават на метода на сумата, който използва заместващ знак. Това означава, че може да приеме всеки списък от тип, който е подклас на Number като Integer или Double.

2. Заместващи символи с долна граница

Изразява се с помощта на заместващия знак ('?'), последван от ключовата дума super, последвана от нейната долна граница:

js глобална променлива

Синтаксис: Тип колекция

Изпълнение: 

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

Изход
[4 5 6 7] [4 5 6 7]

Обяснение: Тук методът printOnlyIntegerClassorSuperClass приема само Integer или неговите суперкласове (като Number). Ако се опитате да подадете списък с Double, това дава грешка по време на компилиране, защото Double не е суперклас на Integer.

знак към int java

Забележка: Използвайте заместващ знак за разширение, когато искате да извлечете стойности от структура, и супер заместващ знак, когато поставяте стойности в структура. Не използвайте заместващ знак, когато получавате и поставяте стойности в структура. Можете да посочите горна граница за заместващ знак или можете да посочите долна граница, но не можете да посочите и двете.

3. Неограничен заместващ знак

Този тип заместващ знак се посочва с помощта на заместващия знак (?), например Списък. Това се нарича списък с неизвестни типове. Те са полезни в следните случаи -

  • Когато пишете метод, който може да се използва с помощта на функционалност, предоставена в класа на обекта.
  • Когато кодът използва методи в общия клас, който не зависи от параметъра тип

Изпълнение:

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

Изход
[1 2 3] [1.1 2.2 3.3]


Създаване на тест