修饰符
通过反射可以获取类的修饰符,主要方法: Class.getModifiers()
返回一个用于描述Field
、Method
和Constructor
的修饰符的整形数值,该数值代表的含义可通过Modifier
这个类分析。
Modifier
类它提供了有关Field、Method和Constructor等的访问修饰符的信息,主要的方法有:toString(int modifiers);
返回: 整形数值modifiers代表的修饰符的字符串;
查看类修饰符
使用 String.class 来验证一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import java.lang.reflect.Modifier;
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);
举个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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 的源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
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 中有大量的用法。平时开发中虽然用到的少,但是学习一下有助于理解反射相关的机制和操作。