java.lang.reflect.Modifier

package java.lang.reflect;

import java.security.AccessController;
import sun.reflect.LangReflectAccess;
import sun.reflect.ReflectionFactory;

/**
 *
 * 用来判断元素类型,元素类型是一个int型的数,它的不同位(bit)表示不同的描述符
 *
 * comment by liqiang
 *
 * @author Nakul Saraiya
 * @author Kenneth Russell
 */
public
class Modifier {

    /*
     * Bootstrapping protocol between java.lang and java.lang.reflect
     *  packages
     */
    static {
        sun.reflect.ReflectionFactory factory =
            (sun.reflect.ReflectionFactory) AccessController.doPrivileged(
                new ReflectionFactory.GetReflectionFactoryAction()
            );
        factory.setLangReflectAccess(new java.lang.reflect.ReflectAccess());
    }

    //是否含有public描述符
    public static boolean isPublic(int mod) {
 //判断public位是否为1,除了public位上为一其他位都为0
    //做按位与操作,如果public位为1则结果为1,否则为0
    return (mod & PUBLIC) != 0;
    }

    //是否含有private描述符
    public static boolean isPrivate(int mod) {
 return (mod & PRIVATE) != 0;
    }

    //是否含有protected描述符
    public static boolean isProtected(int mod) {
 return (mod & PROTECTED) != 0;
    }

    //是否含有static描述符
    public static boolean isStatic(int mod) {
 return (mod & STATIC) != 0;
    }

    //是否含有final描述符
    public static boolean isFinal(int mod) {
 return (mod & FINAL) != 0;
    }

    //是否含有synchronized描述符
    public static boolean isSynchronized(int mod) {
 return (mod & SYNCHRONIZED) != 0;
    }

    //是否含有volatile描述符
    public static boolean isVolatile(int mod) {
 return (mod & VOLATILE) != 0;
    }

    //是否含有transient描述符
    public static boolean isTransient(int mod) {
 return (mod & TRANSIENT) != 0;
    }

    //是否含有native描述符
    public static boolean isNative(int mod) {
 return (mod & NATIVE) != 0;
    }

    //是否含有interface描述符
    public static boolean isInterface(int mod) {
 return (mod & INTERFACE) != 0;
    }

    //是否含有abstract描述符
    public static boolean isAbstract(int mod) {
 return (mod & ABSTRACT) != 0;
    }

    //是否含有strict描述符
    public static boolean isStrict(int mod) {
 return (mod & STRICT) != 0;
    }

    //返回此描述项的字符串表示
    public static String toString(int mod) {
 StringBuffer sb = new StringBuffer();
 int len;

 //向StringBuffer中添加含有的不同描述符
 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 ");

 //如果有定义描述符则去掉最后一个空格
 if ((len = sb.length()) > 0)
     return sb.toString().substring(0, len-1);
 
 //没有定义返回空字符串
 return "";
    }

    //每一特定位表示一种描述类型,1为有0为没有,有多个1表示同时具有多个描述符
    //它只使用了12位,用short就可以表示,可能是为了扩展考虑
   
    //int型的值的第1位表示public
    public static final int PUBLIC           = 0x00000001;

    //第2位表示private  
    public static final int PRIVATE          = 0x00000002;

    //第3位表示protected 
    public static final int PROTECTED        = 0x00000004;

    //第4位表示static 
    public static final int STATIC           = 0x00000008;

    //第5位表示final 
    public static final int FINAL            = 0x00000010;

    //第6位表示synchronized(标志同步方法,同步块) 
    public static final int SYNCHRONIZED     = 0x00000020;

    //第7位表示volatile(表示同步安全)  
    public static final int VOLATILE         = 0x00000040;

    //第8位表示transient(表示持久化时不处理的字段) 
    public static final int TRANSIENT        = 0x00000080;

    //第9位表示nateive(本地方法) 
    public static final int NATIVE           = 0x00000100;

    //第10位表示interface
    public static final int INTERFACE        = 0x00000200;

    //第11表示abstract  
    public static final int ABSTRACT         = 0x00000400;

    //第12位表示strict  
    public static final int STRICT           = 0x00000800;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值