Java ---リフレクション

Java-リフレクション

大まかに書いて、後で更新し
ここに画像の説明を挿入
ます。クラスを取得する3つの方法:
//最初の
クラスaClass = Dog.class;
// 2番目の
クラスbClass = Class.forName( "Reflect.Dog");
// 3番目の種類の
犬dog = new Dog();
クラスcClass = dog.getClass();

例:
学生クラス

package Reflect.Test1;

/**
 * @Author shall潇
 * @Date 2021/2/19
 * @Description
 */
public class Student {
    public int id;
    String name;
    private String gender;

    public Student() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    private String getGender() {
        return gender;
    }

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

    private String show(int cnt,String name1){
        return "I am "+this.name+"学号"+id+"性别:"+this.gender+","+name1+"老师叫我拿"+cnt+"杯拿铁";
    }

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

テストクラス

package Reflect;

import Reflect.Test1.Student;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @Author shall潇
 * @Date 2021/2/19
 * @Description
 */
public class TestStudent {
    public static Student getStudent() throws Exception{    //获取类的对象
        Class aClass = null;
        Student stu;
        try {
            aClass = Class.forName("Reflect.Test1.Student");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(aClass.getPackage().getName());//包名
        System.out.println(aClass.getName());             //类名

            Constructor cons = aClass.getDeclaredConstructor(); //获取构造器
            cons.setAccessible(true);                     //设置权限
            Object o = cons.newInstance();
            stu = (Student) o;
            System.out.println(o);
        return stu;
    }
    public static void setFields() throws Exception {       //设置属性
        Student s = getStudent();
        Class<? extends Student> aClass = s.getClass();
        Field[] fields = aClass.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            fields[i].setAccessible(true);
            if(null!=fields[i].getName() && "id".equals(fields[i].getName())){
                fields[i].set(s,123);
            }else if(null!=fields[i].getName() && "name".equals(fields[i].getName())){
                fields[i].set(s,"Jack");
            }else if(null!=fields[i].getName() && "gender".equals(fields[i].getName())){
                fields[i].set(s,"女");
            }
        }
        System.out.println(s);

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

//        Field id = aClass.getField("id");
//        id.set(s,"1002");
//
//        Field gender = aClass.getDeclaredField("gender");
//        gender.setAccessible(true);
//        gender.set(s,"女");
//
//        System.out.println(s);

        //setFields();
        Student s = getStudent();                   //设置方法
        Class<? extends Student> aClass = s.getClass();
        Method gender = aClass.getDeclaredMethod("setGender",String.class);
        gender.setAccessible(true);
        gender.invoke(s,"男");
        s.setId(1002);
        s.setName("Lilly");
        System.out.println(s);

        Method show = aClass.getDeclaredMethod("show",int.class,String.class);
        show.setAccessible(true);
        Object o = show.invoke(s,25,"Tom");
        System.out.println(o);

        int modifiers = show.getModifiers();        //修饰符
        System.out.println(modifiers);

    }
}

おすすめ

転載: blog.csdn.net/qq_43288259/article/details/113864936