Toidicode.com

Toidicode.com

BASIC TO ADVANCE

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.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

0 Comments

Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!

Bình luận

Captcha