java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java反射获取字段修饰符

Java反射获取字段修饰符的方法

作者:Cache技术分享

想知道Java中如何获取字段的修饰符吗,本文详细讲解getModifiers()和Java20新引入的accessFlags()两种方法,对比它们的可读性和适用场景,帮你轻松判断字段是public、private还是static,无论你是框架开发者还是日常编程,都能快速掌握字段修饰符的获取技巧

字段(Field)的修饰符和类的修饰符获取方式是类似的。我们既可以用传统的 getModifiers() + Modifier 工具类,也可以用 accessFlags()(Java 20 引入的 API)来获取更直观的结果。

1. 使用getModifiers()获取修饰符

示例代码

import java.lang.reflect.*;

class User {
    private String name;
}

public class FieldModifierDemo {
    public static void main(String[] args) throws Exception {
        Class<?> userClass = User.class;
        Field nameField = userClass.getDeclaredField("name");

        int modifiers = nameField.getModifiers();
        System.out.println("isStatic:  " + Modifier.isStatic(modifiers));
        System.out.println("isPublic:  " + Modifier.isPublic(modifiers));
        System.out.println("isPrivate: " + Modifier.isPrivate(modifiers));
        System.out.println("isFinal:   " + Modifier.isFinal(modifiers));
    }
}

输出结果

isStatic:  false
isPublic:  false
isPrivate: true
isFinal:   false

说明

2. 使用accessFlags()(Java 20+ 推荐方式)

Java 20 引入了 Field.accessFlags() 方法,它返回一个 Set<AccessFlag>,比 int 掩码更直观。

示例代码

import java.lang.reflect.*;

class User {
    private String name;
}

public class AccessFlagDemo {
    public static void main(String[] args) throws Exception {
        Class<?> userClass = User.class;
        Field nameField = userClass.getDeclaredField("name");

        var flags = nameField.accessFlags();
        System.out.println("Flags = " + flags);
    }
}

输出结果

Flags = [PRIVATE]

说明

3.getModifiers()vsaccessFlags()对比

方法返回类型可读性支持版本
getModifiers()int 位掩码需要 Modifier.isXXX() 解码JDK 1.1 起
accessFlags()Set<AccessFlag>直观,可读性更强JDK 20 起

注意

4. 总结

以上就是Java反射获取字段修饰符的方法的详细内容,更多关于Java反射获取字段修饰符的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文