框架基础(5)_通过反射方式调用类方法

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

通过反射方式拷贝对象


说明

在这里插入图片描述

  • 如果底层方法是实例方法,第一个参数就是该对象实例,第二个参数是方法的参数列表,invoke 的返回值就是实例方法的返回值。
  • 如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。
  • 如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。

代码演示

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 ReflectDemo3
{
	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[] {});
		Method method = class1.getDeclaredMethod("setName",new Class[] { String.class });

		Object invoke = method.invoke(instance, new Object[] { "魏宇轩" });

		// Method mget = class1.getDeclaredMethod("getName", new Class[]{});

		Method mget = class1.getDeclaredMethod("getName", null);
		Object invoke2 = mget.invoke(instance, new Object[] {});

		Method method2 = class1.getDeclaredMethod("printInfo", null);
		// 破坏私有方法,让我们能调用
		method2.setAccessible(true);
		Object invoke3 = method2.invoke(null, null);
	}
}
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/103537745