Wildcard trong Java - Khái niệm quan trọng về Java Genetics
21/06/2021 02:02
Trong bài viết này, chúng ta sẽ thảo luận về Wildcard trong Java. Wildcard (Ký tự đại diện) trong Java là một khái niệm hữu ích trong Java Generics. Chúng ta sẽ tìm hiểu Wildcard trong Java là gì và làm thế nào chúng ta có thể kết hợp nó vào các chương trình Java của mình. Có 3 loại ký tự đại diện trong Java: Ký tự đại diện giới hạn trên, Ký tự đại diện giới hạn dưới và Ký tự đại diện không giới hạn. Chúng ta sẽ thảo luận về từng loại ký tự cùng các ví dụ cụ thể của nó trong bài viết dưới đây.
Wildcard trong Java là gì?
Các ký tự đại diện trong Java về cơ bản là những dấu hỏi mà chúng ta sử dụng trong lập trình chung, về cơ bản nó đại diện cho các kiểu chưa biết. Chúng ta sử dụng Java Wildcard rộng rãi trong các tình huống như trong một loại tham số, biến cục bộ hoặc trường và cũng như một kiểu trả về.
Wildcard trong Java là gì?
Không giống như mảng, các cách khởi tạo khác nhau của một kiểu chung không tương thích với nhau, thậm chí không rõ ràng. Chúng ta có thể loại bỏ sự không tương thích này bằng cách sử dụng ký tự đại diện '?' như một tham số kiểu thực tế.
Các ký tự đại diện không là gì ngoài dấu chấm hỏi (?) mà bạn sử dụng trong Java Generics. Chúng ta có thể sử dụng Java Wildcard như một biến cục bộ, tham số, trường hoặc như một kiểu trả về. Tuy nhiên, khi lớp chung được khởi tạo hoặc khi một phương thức chung được gọi, chúng ta không thể sử dụng các ký tự đại diện. Ký tự đại diện rất hữu ích để loại bỏ sự không tương thích giữa các bản khởi tạo khác nhau của một kiểu chung. Sự không tương thích này được loại bỏ bằng cách sử dụng các ký tự đại diện ? như một tham số kiểu thực tế.
Tham số Wildcard trong Java
Có hai loại tham số mà chúng ta truyền cho một phương thức dưới dạng tham số vào và tham số ra, đó là :
- in variable: là một biến cung cấp dữ liệu thực tế cho chương trình Java. Ví dụ, có một phương thức myMethod (nguồn, đích). Trong phương thức này, nguồn đóng vai trò là một biến trong phương thức.
- Out variable: là một biến trong đó dữ liệu cập nhật được chương trình java lưu trữ. Ví dụ, có một phương thức myMethod (nguồn, đích). Trong phương thức này, đích hoạt động như một biến ngoài của phương thức.
>>> Đọc thêm: Gắn kết tĩnh gắn kết động trong Java - Sự khác biệt và ví dụ cụ thể
Các loại ký tự đại diện trong Java
- Ký tự đại diện giới hạn trên
- Ký tự đại diện giới hạn dưới
- Ký tự đại diện không giới hạn
Các loại ký tự đại diện trong Java
Ký tự đại diện được giới hạn trên trong - Upper Bounded Wildcards trong Java
Các ký tự đại diện Giới hạn trên là ký tự đại diện giúp giảm bớt hạn chế của loại biến. Nghĩa là, nếu chúng ta muốn nới lỏng giới hạn về loại biến trong phương thức, chúng ta có thể sử dụng loại ký tự đại diện này.
Ví dụ: chúng ta đang sử dụng ký tự đại diện giới hạn trên trong phương thức sum để tính tổng của bất kỳ loại biến nào cho dù đó là biến kiểu int hay biến kiểu kép.
>>> Đọc thêm: Đa luồng trong Java - Tìm hiểu về lập trình đa luồng trong Java
Ký tự đại diện được giới hạn dưới - Lower Bounded Wildcards trong Java
Chúng ta sử dụng ký tự đại diện Giới hạn dưới để mở rộng việc sử dụng loại biến. Ví dụ, nếu chúng ta muốn thêm danh sách các số nguyên trong phương thức của mình, chúng ta có thể sử dụng List <Integer>, nhưng sử dụng nó, chúng ta sẽ bị ràng buộc chỉ sử dụng danh sách các số nguyên. Vì vậy, ở đây, chúng ta cũng có thể sử dụng Danh sách <Số> và Danh sách <Đối tượng> để lưu danh sách các số nguyên. Vì vậy, chúng ta sử dụng ký tự đại diện Lower Bound để đạt được điều này. Chúng ta có thể sử dụng điều này bằng một ký tự đại diện? và đặt một từ khóa siêu sau đó, theo sau là giới hạn dưới.
Ví dụ: <? super LowerBound>
package com.techvidvan.wildcards;
import java.util. * ;
public class LowerBoundWildcard {
public static void main(String[] args) {
//Lower Bounded Integer List
List < Integer > intList = Arrays.asList(10, 20, 30, 40);
//Passing Integer list object
printOnlyIntegerClassorSuperClass(intList);
//Number list
List < Number > numberList = Arrays.asList(10, 20, 30, 40);
//Passing Integer list object
printOnlyIntegerClassorSuperClass(numberList);
}
public static void printOnlyIntegerClassorSuperClass(List < ?super Integer > list) {
System.out.println(list);
}
}
Output
[10, 20, 30, 40]
[10, 20, 30, 40]
Ký tự đại diện không bị ràng buộc - Unbounded Wildcards trong Java
Chúng ta sử dụng các ký tự đại diện Không bị ràng buộc khi chúng ta muốn chỉ định loại ký tự đại diện có ký tự đại diện ?. Chúng ta thường sử dụng ký tự đại diện này khi mã bên trong phương thức đang sử dụng chức năng Đối tượng và cũng như khi mã bên trong phương thức không phụ thuộc vào kiểu tham số.
Ví dụ:
package com.techvidvan.wildcards;
import java.util. * ;
public class UnboundedWildcard {
public static void main(String[] args) {
//Integer List
List < Integer > intList = Arrays.asList(10, 20, 30, 40);
//Double list
List < Double > doubleList = Arrays.asList(11.5, 13.6, 67.8, 43.7);
printList(intList);
printList(doubleList);
}
private static void printList(List < ?>list) {
System.out.println(list);
}
}
Output
[10, 20, 30, 40]
[11.5, 13.6, 67.8, 43.7]
>>> Tham khảo: Khóa học lập trình Java
Hướng dẫn sử dụng Wildcard trong Java
Dưới đây là hướng dẫn sử dụng từng loại biến trong các trường hợp sau:
- Upper bound wildcard:: Nếu biến thuộc loại, tức là có một biến trong, chúng tôi sử dụng từ khóa 'expand' với ký tự đại diện.
- Lower bound wildcard: Nếu biến thuộc kiểu out, tức là có biến out, chúng ta sử dụng từ khóa 'super' với ký tự đại diện.
- Unbounded wildcard: Nếu chúng ta có thể truy cập một biến bằng phương thức lớp Đối tượng, thì chúng ta nên sử dụng các ký tự đại diện không bị ràng buộc.
- No wildcard: Nếu biến là cả danh mục trong và ngoài, thì không cần sử dụng các ký tự đại diện.
Kết luận:
Trong bài viết này, chúng ta đã nghiên cứu ký tự đại diện trong java. Chúng ta sử dụng Wildcard trong Java trong khi sử dụng các ký tự chung trong Java. Các ký tự đại diện giúp chúng ta cung cấp phương tiện truyền kiểu tham số thực tế. Có ba loại ký tự đại diện trong Java là ký tự đại diện Giới hạn trên , Giới hạn dưới và ký tự đại diện Không giới hạn. Chúng ta đã thảo luận về từng ví dụ trong số chúng hy vọng bài viết này sẽ giúp bạn trong việc xây dựng khái niệm của bạn về Wildcard Trong Java. Đừng quên tìm hiểu thêm về Java và các ngôn ngữ lập trình khác qua các khóa học lập trình tại Viện công nghệ thông tin T3H.