Java基础类:Modifier(修饰符类)

在查看反射相关的Class、Field 、Constructor 等类时,看到他们都有这样一个方法:getModifiers():返回此类或接口以整数编码的 Java 语言修饰符。如需要知道返回的值所代表的意思,则需要用到 java.lang.reflect.Modifier 这个类,这个类提供了 static 方法和常量,可以对类和成员访问修饰符进行解码。

既然是位于 java.lang.reflect 下,那说明一般是在动态加载过程中、使用java反射对某些类进行过滤时会用到,一般开发并不是很常用。但是对于写框架,个人还是觉得可以用到的。

Modifier 修饰符工具类

public class java.lang.reflect.Modifier extends Object

 

解码方法

以上所有的修饰符都有对应的、方法声明为【public static boolean is***(int mod)】的解码方法,且方法的实现也都是类似的,比如:

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

toString 方法的实现

public static String toString(int mod) {
    StringBuilder sb = new StringBuilder();
    int len;
 
    if ((mod & PUBLIC) != 0)        sb.append("public ");
    if ((mod & PROTECTED) != 0)     sb.append("protected ");
    if ((mod & PRIVATE) != 0)       sb.append("private ");
 
    /* Canonical典范、规范 order */
    if ((mod & ABSTRACT) != 0)      sb.append("abstract ");
    if ((mod & STATIC) != 0)        sb.append("static ");
    if ((mod & FINAL) != 0)         sb.append("final ");
    if ((mod & TRANSIENT) != 0)     sb.append("transient ");
    if ((mod & VOLATILE) != 0)      sb.append("volatile ");
    if ((mod & SYNCHRONIZED) != 0)  sb.append("synchronized ");
    if ((mod & NATIVE) != 0)        sb.append("native ");
    if ((mod & STRICT) != 0)        sb.append("strictfp ");
    if ((mod & INTERFACE) != 0)     sb.append("interface ");
 
    /* trim trailing space */
    if ((len = sb.length()) > 0)  return sb.toString().substring(0, len-1);
    return "";
}

 

示例1:解码mod演示

public class Test {
	private static final transient int temp = 1;
 
	public static void main(String[] args) throws Exception {
		testModifier(Test.class.getDeclaredField("temp").getModifiers());//154。private static final transient
		testModifier(Test.class.getMethod("main", String[].class).getModifiers());//9。public static
	}
 
	public static void testModifier(int mod) {
		System.out.println("----------------------【mod=" + mod + "】----------------------");
		System.out.println("【toString】" + Modifier.toString(mod));
		System.out.println("【isPublic】" + Modifier.isPublic(mod));
		System.out.println("【isPrivate】" + Modifier.isPrivate(mod));
		System.out.println("【isProtected】" + Modifier.isProtected(mod));
		System.out.println("【isStatic】" + Modifier.isStatic(mod));
		System.out.println("【isFinal】" + Modifier.isFinal(mod));
		System.out.println("【isSynchronized】" + Modifier.isSynchronized(mod));
		System.out.println("【isVolatile】" + Modifier.isVolatile(mod));
		System.out.println("【isTransient】" + Modifier.isTransient(mod));
		System.out.println("【isNative】" + Modifier.isNative(mod));
		System.out.println("【isInterface】" + Modifier.isInterface(mod));
		System.out.println("【isAbstract】" + Modifier.isAbstract(mod));
		System.out.println("【isStrict】" + Modifier.isStrict(mod));
	}
}

示例2:不同类型元素可使用的修饰符

System.out.println(Modifier.toString(Modifier.classModifiers()));//public protected private abstract static final strictfp
System.out.println(Modifier.toString(Modifier.interfaceModifiers()));//public protected private abstract static strictfp
System.out.println(Modifier.toString(Modifier.constructorModifiers()));//public protected private
System.out.println(Modifier.toString(Modifier.methodModifiers()));//public protected private abstract static final synchronized native strictfp
System.out.println(Modifier.toString(Modifier.fieldModifiers()));//public protected private static final transient volatile
System.out.println(Modifier.toString(Modifier.parameterModifiers()));//final
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值