通過java.lang.reflect包下的一些方法,下面講述的是利用Class獲取,包括Field、Method類都有的方法getModifier()可以獲取到Java修飾符在Java中的整數代號,都是int型。
JAVA常用的一些修飾符:
PUBLIC: 1
PRIVATE: 2
PROTECTED: 4
STATIC: 8
FINAL: 16
SYNCHRONIZED: 32
VOLATILE: 64
TRANSIENT: 128
NATIVE: 256
INTERFACE: 512
ABSTRACT: 1024
STRICT: 2048
Modifier提供了很多靜態方法。如public static String toString(int mod)就可以輸出該整數對應的所有的修飾符。public static boolean isPublic(int mod)就可以判斷該整數對應的是不是包含public修飾符。
通過Modifier的isPublic、isPrivate、isStatic等方法,可以判斷是否包含某些修飾符,現在如果有這么一個需求,我需要找到僅有public static兩個修飾符的變量。
現在看下Modifier的源碼,可以看到以下代碼:
public static final int PUBLIC = 0x00000001;
public static final int PRIVATE =0x00000002;
public static final int PROTECTED = 0x00000004;
public static final int STATIC =0x00000008;
public static final int FINAL =0x00000010;
public static final int SYNCHRONIZED = 0x00000020;
把它們轉換成二進制,可以看出,Modifier使用一個二進制的位來表示是否包含某個修飾符。
如果是public static,對應的整數就是二進制的:1001,也就是9。
如果是public static final就是11001,也就是25。
現在如果想判斷是否僅有public static兩個修飾符,那么就可以判斷是否field.getModifiers() == 25。
---------------------------------------------------------------
轉載自:https://blog.csdn.net/qq_40395278/article/details/81060980