logo

Символи підстановки в Java

У Java Generics символи підстановки використовуються, коли ви не знаєте точного типу. Вони дозволяють писати гнучкий і багаторазово використовуваний код. Символ підстановки представлений символом ? (знак питання). Символи підстановки в основному використовуються в параметрах методів для безпечного прийняття різних загальних типів.

Типи символів підстановки в Java

1. Символи підстановки з верхньою межею

Ці символи підстановки можна використовувати, коли ви хочете послабити обмеження на змінну. Наприклад, ви хочете написати метод, який працює на List< Integer >Список< Double >і Список< Number >це можна зробити за допомогою символу підстановки з верхньою межею. 

Щоб оголосити символ узагальнення з верхньою межею, використовуйте символ узагальнення ('?'), після якого йде ключове слово extends, а потім його верхня межа. 



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

множення матриці в c

Реалізація:

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, а потім його нижня межа:

дата використання java

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

Реалізація: 

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.

img css align

Примітка: Використовуйте розширений символ узагальнення, коли ви хочете отримати значення зі структури, і символ підстановки, коли ви розміщуєте значення в структурі. Не використовуйте символ підстановки, коли ви отримуєте та розміщуєте значення в структурі. Ви можете вказати верхню межу для символу узагальнення або ви можете вказати нижню межу, але ви не можете вказати обидва.

3. Необмежений символ підстановки

Цей тип символу узагальнення вказується за допомогою символу узагальнення (?), наприклад List. Це називається списком невідомих типів. Вони корисні в таких випадках:

  • Під час написання методу, який можна використовувати за допомогою функціональних можливостей, наданих у класі Object.
  • Коли код використовує методи в загальному класі, який не залежить від параметра типу

Реалізація:

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]


Створіть вікторину