Java

Java 8 Tutorial: Functional Interface

Java 8 Tutorial: Functional Interface

Trong Java, xuất hiện một khái niệm mới là SAM (Single Abstract Method) hay còn gọi là Functional Interface. Functional Interface thực chất là 1 Interface với duy nhất 1 abstract method (method không có phần body). Có thể các bạn sẽ tự hỏi Interface thì làm gì có các method được implement. Điều đó chỉ đúng với các phiên bản Java 7 trở về. Trong Java 8, 1 Interface có thể định nghĩa các default method (phương thức mặc định). Chúng ta sẽ tìm hiểu về Default Method trong phần sau.

@FunctionalInterface

Nếu một interface được đánh dấu với @FunctionalInterface annotation thì nó phải có 1 và duy nhất 1 abstract function, ngược lại nếu không tồn tại 1 abstract function hoặc có nhiều hơn 1 thì trình biên dịch sẽ báo lỗi.

@FunctionalInterface
interface IFoo {
	void foo1();
	void foo2();
}

java: Unexpected @FunctionalInterface annotation
IFoo is not a functional interface
multiple non-overriding abstract methods found in interface IFoo

Nhưng interface dưới đây lại hợp lệ

@FunctionalInterface
interface IFoo {
	void foo1();
	default void foo2(); // Default method
}

Trong trường hợp 1 interface chỉ có một abstract method nhưng không được đánh dấu bằng @FunctionalInterface annotation thì vẫn được hiểu là 1 functional interface. Ngược lại, nó sẽ là 1 interface bình thường.

Một số Functional Interface trong Java 8

Trong Java đã tồn tại rất nhiều Interface chỉ có một method như: Runnable, Comparator.. Trong Java 8 có một package mới là java.util.function, package này chứa rất nhiều functional interface, các interface này sẽ được dùng trong rất nhiều API khác trong Java 8. Ở đây tôi sẽ liệt kê ra 1 số FI nổi bật, chi tiết sẽ được đề cập trong các bài viết sau.

Consumer<T>: Xử lý dựa trên một tham số đầu vào có kiểu T và không có kiểu trả về
Supplier<T>: Không nhận vào tham số nào, xử lý và trả về một đối tượng có kiểu T
Predicate<T>: Xử lý dựa trên một tham số đầu vào có kiểu T và không có kiểu trả về giá trị boolean
Function<T, R>: Xử lý dựa trên một tham số đầu vào có kiểu T và trả về một đối tượng có kiểu R

Kết thúc bài giới thiệu về Functional Interface trong Java 8 tại đây. Mình rất vui nếu có thể nhận được các đóng góp các ý kiến phản hồi bằng cách comment bên dưới bài viết. Các bạn có thể tham khảo một số bài viết khác trong series Java 8 Tutorial tại đây:
Series Java 8 Tutorial

http://www.edwardthienhoang.wordpress.com

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s