框架基础(4)_通过反射方式赋值

本系列博客汇总在这里:框架基础 汇总

通过反射方式赋值


代码演示

package cn.wyx.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ReflectDemo2
{
	public static void main(String[] args) throws Exception
	{
		Class<?> class1 = Class.forName("cn.wyx.reflect.Person");
		// 获得构造器
		Constructor<?> constructor = class1.getDeclaredConstructor(new Class[] {});
		// 根据类的默认构造器来获得一个对象
		Object instance = constructor.newInstance(new Object[] {});
		System.out.println(instance);
		// 获得类的所有方法
		Method[] methods = class1.getDeclaredMethods();
		for (Method m : methods)
		{
			// 获得方法的名字
			String name = m.getName();
			// 获得是否以set开始
			boolean startsWith = name.startsWith("set");
			if (startsWith)
			{
				// 获得到了set字符串的后面的值
				String fieldName = name.substring(3);
				// 获得属性的名字
				fieldName = fieldName.substring(0, 1).toLowerCase() + fieldName.substring(1);
				// 获得方法所对应的属性
				Field field = class1.getDeclaredField(fieldName);
				// 获得属性的具体类型,获得属性对应的类型
				Class<?> type = field.getType();
				if (type == Integer.class)
				{
					// 反射调用set方法
					m.invoke(instance, new Object[] { 1 });
				}
				if (type == String.class && "address".equals(fieldName))
				{
					// 反射调用set方法
					m.invoke(instance, new Object[] { "北京" });
				}
				if (type == String.class && "name".equals(fieldName))
				{
					// 反射调用set方法
					m.invoke(instance, new Object[] { "魏宇轩" });
				}
			}
		}
		System.out.println(instance);
	}
}
package cn.wyx.reflect;

public class Person
{
	private Integer id;

	private String name;

	private String address;

	public Person()
	{
	}

	public Person(Integer id, String name, String address)
	{
		super();
		this.id = id;
		this.name = name;
		this.address = address;
	}

	private static void printInfo()
	{
		System.out.println("静态方法的反射调用");
	}

	public Integer getId()
	{
		return id;
	}

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

	public String getName()
	{
		return name;
	}

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

	public String getAddress()
	{
		return address;
	}

	public void setAddress(String address)
	{
		this.address = address;
	}

	@Override
	public String toString()
	{
		return "Person [id=" + id + ", name=" + name + ", address=" + address
				+ "]";
	}
}

在这里插入图片描述

如有错误,欢迎指正!

发布了449 篇原创文章 · 获赞 210 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/103537606