Trong bài viết ngắn này chúng ta sẽ cùng nhau tìm hiểu cách kiểm tra một class có phải là abstract class hay không trong Java sử dụng Reflection API.
Chuẩn bị
Giả sử chúng ta có một abstract class AbstractExample và InterfaceExample interface.
public abstract class AbstractExample { public abstract LocalDate getLocalDate(); public abstract LocalTime getLocalTime(); } public interface InterfaceExample { }
Modifier#isAbstract Method
Chúng ta có thể kiểm tra một class có phải là abstract hay không bằng cách sử dụng Modifier#isAbstract method từ Reflection API.
import java.lang.reflect.Modifier; public class Main { public static void main(String[] args) throws Exception { Class<AbstractExample> clazz = AbstractExample.class; System.out.println("Is abstract: " + Modifier.isAbstract(clazz.getModifiers())); } }
Output: Is abstract: true
Thế nhưng có một điểm lưu ý ở đây đó là Modifier#isAbstract xem interface tương tự như abstract. Chúng ta có thể kiểm tra như sau
public class Main { public static void main(String[] args) throws Exception { Class<InterfaceExample> clazz = InterfaceExample.class; System.out.println("Is abstract: " + Modifier.isAbstract(clazz.getModifiers())); } }
Output: Is abstract: true
Để phân biệt giữa abstract và interface trong Java reflection chúng ta có thể sử dụng thêm isInterface() method.
public class Main { public static void main(String[] args) throws Exception { Class<AbstractExample> clazz = AbstractExample.class; int mod = clazz.getModifiers(); boolean result = Modifier.isAbstract(mod) && !Modifier.isInterface(mod); System.out.println("AbstractExample is abstract: " + result); System.out.println("-----------------------------"); Class<InterfaceExample> interfaceClass = InterfaceExample.class; int interfaceClassMode = interfaceClass.getModifiers(); boolean interfaceClassModeResult = Modifier.isAbstract(interfaceClassMode) && !Modifier.isInterface(interfaceClassMode); System.out.println("InterfaceExample is abstract: " + interfaceClassModeResult); } }
Output
AbstractExample is abstract: true ----------------------------- InterfaceExample is abstract: false
Tóm lược
Qua bài viết này chúng ta đã biết cách kiểm tra một class có phải là abstract class hay không tại thời điểm runtime. Các bạn cần lưu ý sử dụng thêm isInterface() method để kết quả kiểm tra chính xác nhất.
Nguồn: Baeldung