修饰符
通过反射可以获取类的修饰符,主要方法: Class.getModifiers()
返回一个用于描述Field
、Method
和Constructor
的修饰符的整形数值,该数值代表的含义可通过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 中有大量的用法。平时开发中虽然用到的少,但是学习一下有助于理解反射相关的机制和操作。