← 返回首页
JavaSE系列教程(八十二)
发表时间:2020-02-26 18:12:38
讲解反射获取返回类型、访问修饰符和注解。

1.反射获取返回类型

java.lang.reflect.Method.getReturnType()方法返回一个Class对象,该对象表示此Method对象的方法的返回类型。

class Person  {
    private String name;
    private String gender;
    private String birthday;

    private Person() {
    }

    public Person(String name){
        this.name = name;
    }

    public Person(String name, String gender, String birthday) {
        this.name = name;
        this.gender = gender;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    private void secrete(String content) {
        System.out.println("Show secrete is : " + content);
    }

    protected void sayHello(String msg) {
        System.out.println("hello," + msg);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }

}

public class ReflectionDemo {

    public static void main(String[] args) throws Exception {

        Class clazz = Class.forName("demo2.Person");
        Method method = clazz.getDeclaredMethod("getName");
        Class returnType =  method.getReturnType();
        System.out.println(returnType.toGenericString());

    }
}
运行结果:
public final class java.lang.String

2.反射获取访问修饰符

Field或者Method的getModifiers()方法返回int类型值表示该字段或者方法的修饰符。

其中,该修饰符是java.lang.reflect.Modifier的静态属性。

对应表如下:

名字 常量值
PUBLIC 1
PRIVATE 2
PROTECTED 4
STATIC 8
FINAL 16
SYNCHRONIZED 32
VOLATILE 64
TRANSIENT 128
NATIVE 256
INTERFACE 512
ABSTRACT 1024
STRICT 2048
class Person  {
    private String name;
    private String gender;
    private String birthday;

    private Person() {
    }

    public Person(String name){
        this.name = name;
    }

    public Person(String name, String gender, String birthday) {
        this.name = name;
        this.gender = gender;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    private void secrete(String content) {
        System.out.println("Show secrete is : " + content);
    }

    protected void sayHello(String msg) {
        System.out.println("hello," + msg);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }


}

public class ReflectionDemo {

    public static void main(String[] args) throws Exception {
        Class clazz = Class.forName("demo2.Person");
        Method method = clazz.getDeclaredMethod("getName");
        int modifier =  method.getModifiers();
        System.out.println(modifier);
        System.out.println(modifier == Modifier.PUBLIC);

    }
}

运行结果:
1
true

3.反射获取注解

java.lang.reflect.AccessibleObject.getAnnotations()方法返回此元素上存在的所有注解。

class Person  {
    private String name;
    private String gender;
    private String birthday;

    private Person() {
    }

    public Person(String name){
        this.name = name;
    }

    public Person(String name, String gender, String birthday) {
        this.name = name;
        this.gender = gender;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    private void secrete(String content) {
        System.out.println("Show secrete is : " + content);
    }

    @Deprecated
    protected void sayHello(String msg) {
        System.out.println("hello," + msg);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }


}

public class ReflectionDemo {

    public static void main(String[] args) throws Exception {

        Class clazz = Class.forName("demo2.Person");
        Method method = clazz.getDeclaredMethod("sayHello",String.class);
        System.out.println(method.toGenericString());
        Annotation[] annotations =  method.getAnnotations();
        for(Annotation annotation: annotations){
            System.out.println(annotation.toString());
        }
    }
}

运行结果:
protected void demo2.Person.sayHello(java.lang.String)
@java.lang.Deprecated()