反射小demo

反射练习

代码
package com.ws.practise.reflcet;

import lombok.Data;

/**
 * @author 王顺
 * @description
 * @date 2022/4/14
 */
@Data
public class Animal {
    private String id;
    private String name;
    private String age;

    public Animal() {
    }

    public Animal(String id, String name, String age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    private void eat(){
        System.out.println("动物吃东西");
    }

    private void walk(){
        System.out.println("动物行走");
    }
}
package com.ws.practise.reflcet;

import org.junit.Test;

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

/**
 * @author 王顺
 * @description
 * @date 2022/4/14
 */
public class testReflect {
    @Test
    public void test1(){
        try {
            //class.forname获取
            Class<?> animalClass = Class.forName("com.ws.practise.reflcet.Animal");
            Constructor<?>[] constructors = animalClass.getConstructors();
            Field[] declaredFields = animalClass.getDeclaredFields();
            Method[] declaredMethods = animalClass.getDeclaredMethods();

            //通过 对象.getClass()获取
//            Animal animal = new Animal();
//            Class<? extends Animal> animalClass = animal.getClass();
//            Constructor<?>[] constructors = animalClass.getConstructors();
//            Field[] declaredFields = animalClass.getDeclaredFields();
//            Method[] declaredMethods = animalClass.getDeclaredMethods();

            //通过 类.class获取
//            Class<Animal> animalClass = Animal.class;
//            Constructor<?>[] constructors = animalClass.getConstructors();
//            Field[] declaredFields = animalClass.getDeclaredFields();
//            Method[] declaredMethods = animalClass.getDeclaredMethods();


            //遍历输出
            for (Constructor constructor : constructors) {
                System.out.println("-----开始打印该类构造器---------共有"+constructors.length+"个构造器");
                System.out.println("constructor.toGenericString()="+constructor.toGenericString());
                System.out.println("constructor.toString()="+constructor.toString());
                System.out.println("constructor.getName()="+constructor.getName());
                System.out.println("-----结束打印该类构造器---------");
            }

            for (Field field : declaredFields) {
                System.out.println("-----开始打印该类属性---------共有"+declaredFields.length+"个属性");
                System.out.println("field.getName()"+field.getName());
                System.out.println("field.toString()"+field.toString());
                System.out.println("field.toGenericString()"+field.toGenericString());
                System.out.println("-----结束打印该类属性---------");

            }
            for (Method method : declaredMethods) {
                System.out.println("-----开始打印该类方法---------共有"+declaredMethods.length+"个方法");
                System.out.println("method.getName()"+method.getName());
                System.out.println("method.toString()"+method.toString());
                System.out.println("method.toGenericString()"+method.toGenericString());
                System.out.println("-----结束打印该类方法---------");
            }
        } catch (Exception e) {
            System.out.println("出错啦");
        }

    }
}

-----开始打印该类构造器---------共有2个构造器
constructor.toGenericString()=public com.ws.practise.reflcet.Animal()
constructor.toString()=public com.ws.practise.reflcet.Animal()
constructor.getName()=com.ws.practise.reflcet.Animal
-----结束打印该类构造器---------
-----开始打印该类构造器---------共有2个构造器
constructor.toGenericString()=public com.ws.practise.reflcet.Animal(java.lang.String,java.lang.String,java.lang.String)
constructor.toString()=public com.ws.practise.reflcet.Animal(java.lang.String,java.lang.String,java.lang.String)
constructor.getName()=com.ws.practise.reflcet.Animal
-----结束打印该类构造器---------
-----开始打印该类属性---------共有3个属性
field.getName()id
field.toString()private java.lang.String com.ws.practise.reflcet.Animal.id
field.toGenericString()private java.lang.String com.ws.practise.reflcet.Animal.id
-----结束打印该类属性---------
-----开始打印该类属性---------共有3个属性
field.getName()name
field.toString()private java.lang.String com.ws.practise.reflcet.Animal.name
field.toGenericString()private java.lang.String com.ws.practise.reflcet.Animal.name
-----结束打印该类属性---------
-----开始打印该类属性---------共有3个属性
field.getName()age
field.toString()private java.lang.String com.ws.practise.reflcet.Animal.age
field.toGenericString()private java.lang.String com.ws.practise.reflcet.Animal.age
-----结束打印该类属性---------
-----开始打印该类方法---------共有12个方法
method.getName()equals
method.toString()public boolean com.ws.practise.reflcet.Animal.equals(java.lang.Object)
method.toGenericString()public boolean com.ws.practise.reflcet.Animal.equals(java.lang.Object)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()toString
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.toString()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.toString()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()hashCode
method.toString()public int com.ws.practise.reflcet.Animal.hashCode()
method.toGenericString()public int com.ws.practise.reflcet.Animal.hashCode()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()getName
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.getName()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.getName()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()getId
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.getId()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.getId()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()setName
method.toString()public void com.ws.practise.reflcet.Animal.setName(java.lang.String)
method.toGenericString()public void com.ws.practise.reflcet.Animal.setName(java.lang.String)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()walk
method.toString()private void com.ws.practise.reflcet.Animal.walk()
method.toGenericString()private void com.ws.practise.reflcet.Animal.walk()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()eat
method.toString()private void com.ws.practise.reflcet.Animal.eat()
method.toGenericString()private void com.ws.practise.reflcet.Animal.eat()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()getAge
method.toString()public java.lang.String com.ws.practise.reflcet.Animal.getAge()
method.toGenericString()public java.lang.String com.ws.practise.reflcet.Animal.getAge()
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()canEqual
method.toString()protected boolean com.ws.practise.reflcet.Animal.canEqual(java.lang.Object)
method.toGenericString()protected boolean com.ws.practise.reflcet.Animal.canEqual(java.lang.Object)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()setId
method.toString()public void com.ws.practise.reflcet.Animal.setId(java.lang.String)
method.toGenericString()public void com.ws.practise.reflcet.Animal.setId(java.lang.String)
-----结束打印该类方法---------
-----开始打印该类方法---------共有12个方法
method.getName()setAge
method.toString()public void com.ws.practise.reflcet.Animal.setAge(java.lang.String)
method.toGenericString()public void com.ws.practise.reflcet.Animal.setAge(java.lang.String)
-----结束打印该类方法---------

项目中什么时候能用到

基本无时无刻不在用到,只不过都给封装过了。

  1. 在进行两个类属性互换的时候
	public static void copyProperties(Object source, Object target) throws BeansException {
		copyProperties(source, target, null, (String[]) null);
	}
  1. 在进行实体类和map的转化中,当实体类的字段很多很多时候,就会使用反射进行Field[],for循环进行赋值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值