Java 反射:通过 Modifier 的方法判断字段和函数的访问修饰符


#Java 反射、泛型与注解#


Modifier 类中 isX 系列方法,可以用来判断访问修饰符。

例如:

  • isPublic 是否有 public 修饰符
  • isPrivate 是否有 private 修饰符
  • isProtected 是否有 protected 修饰符
  • isStatic 是否有 static 修饰符
  • isFinal 是否有 final 修饰符
  • isSynchronized 是否有 synchronized 修饰符
  • isVolatile 是否有 volatile 修饰符
  • isTransient 是否有 transient 修饰符
  • isNative 是否有 native 修饰符
  • 等等

示例

判断字段是否为 static

代码示例:

package org.example;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Main {

    public static class UserInfo {
        private String name01;
        protected String name02;
        String name03;
        public String name04;

        private static String name11;
        protected static String name12;
        static String name13;
        public static String name14;
    }

    public static void main(String[] args) {
        for (Field field : UserInfo.class.getDeclaredFields()) {
            boolean isStatic = Modifier.isStatic(field.getModifiers());
            System.out.printf("%s 是否为 static: %s\n", field.getName(), isStatic);
        }
    }

}

执行结果:

name01 是否为 static: false
name02 是否为 static: false
name03 是否为 static: false
name04 是否为 static: false
name11 是否为 static: true
name12 是否为 static: true
name13 是否为 static: true
name14 是否为 static: true

判断函数是否为 static

代码示例:

package org.example;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Main {

    public static class UserInfo {
        public String getName01() {
            return null;
        }
        public static String getName02() {
            return null;
        }
    }

    public static void main(String[] args) {
        for (Method method : UserInfo.class.getDeclaredMethods()) {
            boolean isStatic = Modifier.isStatic(method.getModifiers());
            System.out.printf("%s 是否为 static: %s\n", method.getName(), isStatic);
        }
    }

}

执行结果:

getName01 是否为 static: false
getName02 是否为 static: true

( 本文完 )