Điện thoại/ Zalo
0389934723
Bài 13: Class ẩn danh trong Java
Tiếp tục với series bài này mình sẽ giới thiệu với mọi người về class ẩn danh (anonymous) trong Java.
1. Class ẩn danh là gì?
Class ẩn danh là một dạng class đặc biệt trong Java. Chúng ta có thể khai báo class ẩn danh và khởi tạo chúng cùng một lúc. Sử dụng class ẩn danh giúp cho code ngắn gọn hơn và bạn cũng chỉ nên sử dụng class ẩn danh nếu bạn chỉ sử dụng nó một lần.
Về cơ bản thì class ẩn danh cũng tương tự như local class, chỉ khác là class ẩn danh không có name.
2. Khai báo class ẩn danh.
Để khai báo một class ẩn danh trong Java, chúng ta thực hiện cú pháp sau:
new ClassName () {
// properties
// methods
}
Trong đó: ClassName
là tên của class. Tên class này được lấy với một tên class bất kỳ đã được khai báo ở trong chương trình (mình sẽ nói thêm ở dưới).
VD: Khai báo class ẩn danh.
public class Main {
interface HelloWorld {
public void greet();
}
public static void main(String[] args) {
HelloWorld vietNamGreeting = new HelloWorld() {
@Override
public void greet() {
System.out.println("Xin Chao!");
}
};
vietNamGreeting.greet();
}
}
Ở ví dụ trên mình khai báo một interface HelloWorld
sau đó tạo ra một class ẩn danh dựa vào HelloWorld
. Nhưng thực chất khi object vietNamGreeting
được khởi tạo lại không phải là HelloWorld
.
VD: Mình sẽ thêm một đoạn code để check xem class của vietNamGreeting
xem có phải Helloworld
không.
public class Main {
interface HelloWorld {
public void greet();
}
public static void main(String[] args) {
HelloWorld vietNamGreeting = new HelloWorld() {
@Override
public void greet() {
System.out.println("Xin Chao!");
}
};
System.out.println(vietNamGreeting.getClass());
}
}
Kết quả:
class Main$1
Để dễ so sánh mình sẽ tạo một local class implement Helloworld
interface và get ra class của object xem sao.
public class Main {
interface HelloWorld {
public void greet();
}
public static void main(String[] args) {
class EnglishGreeting implements HelloWorld {
@Override
public void greet() {
System.out.println("Hello!");
}
}
HelloWorld englishGreeting = new EnglishGreeting();
System.out.println(englishGreeting.getClass());
}
}
Kết quả:
class Main$1EnglishGreeting
Như các bạn đã thấy thì đối với class ẩn danh khi chúng ta getClass của nó thì nó sẽ trả rỗng.
3. Các đặc điểm của class ẩn danh.
Dưới đây là một vài điểm khác giữa class ẩn danh và các class khác:
– Lớp ẩn danh không có constructor
.
– Lớp ẩn danh bắt buộc phải implement một class hoặc một interface.
Còn lại thì cơ bản là nó sẽ giống với các class thông thường.
4. Ví dụ thêm.
VD: Truyền lớp ẩn danh vào hàm như một tham số.
public class Main {
interface HelloWorld {
public void greet();
}
public static void main(String[] args) {
greet(new HelloWorld() {
@Override
public void greet() {
System.out.println("Xin Chao!");
}
});
}
public static void greet(HelloWorld helloWorld) {
helloWorld.greet();
}
}
Kết quả:
Xin Chao!
5. Lời kết.
Các lớp ẩn danh sẽ được sử dụng rất nhiều trong những chương trình GUI như Java Fx hay java Android. Nên các bạn chú ý phần này.