# 修饰符

获取类的修饰符

int getModifiers () 返回一个用于描述 FieldMethodConstructor 的修饰符的整形数值,该数值代表的含义可通过 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;

/**
* 获取类的修改符
*
* @author yang juan
* @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 类的头部:

String的类修饰符

# 判断是否为 public

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

/**
* 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 中有大量的用法。平时开发中虽然用到的少,但是学习一下有助于理解反射相关的机制和操作。