java反射03-查看方法修饰符

2023-10-20 10:16:31 浏览数 (1)

修饰符

通过反射可以获取类的修饰符,主要方法: Class.getModifiers() 返回一个用于描述FieldMethodConstructor的修饰符的整形数值,该数值代表的含义可通过Modifier这个类分析。 Modifier 类它提供了有关Field、Method和Constructor等的访问修饰符的信息,主要的方法有:toString(int modifiers); 返回: 整形数值modifiers代表的修饰符的字符串;

查看类修饰符

使用 String.class 来验证一下:

代码语言:javascript复制
import java.lang.reflect.Modifier;

/**
 * 获取类的修改符
 *
 * @author liu kai
 * @since 2015-11-23 14:48
 */
public class ModifierTest {

    public static void main(String[] args) {
        Class cl = String.class;
        String modifiers = Modifier.toString(cl.getModifiers());
        if (modifiers.length() > 0) {
            System.out.print(modifiers   " ");
        }
    }
}

结果:

public final

来看一下 String 类的头部:

判断是否为 public

方法:

Reflection.quickCheckMemberAccess(clazz, modifiers);

举个例子:

代码语言:javascript复制
public static void test() {
  Class clz = String.class;
  try {
    Method method = clz.getMethod("isEmpty");
    boolean isPublic = Reflection.quickCheckMemberAccess(clz, method.getModifiers());
    if (isPublic) {
      System.out.println("is public");
    } else {
      System.out.println("is private");
    }
  } catch (NoSuchMethodException e) {
    e.printStackTrace();
  }
}

查看源码

Reflection.quickCheckMemberAccess 的源码

代码语言:javascript复制

/**
 * The {@code int} value representing the {@code public}
 * modifier.
 */
public static final int PUBLIC           = 0x00000001;

public static boolean quickCheckMemberAccess(Class<?> var0, int var1) {
    return Modifier.isPublic(getClassAccessFlags(var0) & var1);
}

public static boolean isPublic(int mod) {
    return (mod & PUBLIC) != 0;
}

总结

这种用法在框架底层,如Spring 中有大量的用法。平时开发中虽然用到的少,但是学习一下有助于理解反射相关的机制和操作。

0 人点赞