Kiểm tra một class có phải là abstract không với Java Reflection

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 AbstractExampleInterfaceExample 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

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x