首页 课程 师资 教程 报名

如何通过反射创建对象

  • 2022-12-02 09:51:05
  • 402次 星辉

Java Reflection 提供类和接口来获取关于类和对象的反射信息。反射允许以编程方式访问有关加载类的字段、方法和构造函数的信息,以及使用反射字段、方法和构造函数在安全限制内对其底层对应项进行操作。还提供了实例化新对象、调用方法和获取/设置字段值的可能性。

这是一个如何在 Java 中使用反射实例化/创建新对象的示例。

例子

我们的测试类将是一个具有 2 个构造函数的简单模型类。

package com.admfactory.reflect;
public class User {
    private int id;
    private String username;
    public User() {
	System.out.println("User object has been created using constructor User()");
    }
    public User(int id, String username) {
	this.id = id;
	this.username = username;
	System.out.println(String.format("User object has been created using constructor User(%d, %s)", id, username));
    }
    public int getId() {
	return id;
    }
    public void setId(int id) {
	this.id = id;
    }
    public String getUsername() {
	return username;
    }
    public void setUsername(String username) {
	this.username = username;
    }
    public void display() {
	System.out.println(String.format("ID: %d, username: %s", id, username));
    }
}

您可以调用带参数或不带参数的构造函数。

要实例化一个没有参数的新对象:

Constructor<User> constr1 = clazz.getConstructor();
User user3 = constr1.newInstance();

要使用参数实例化一个新对象:

Constructor<User> constr2 = clazz.getConstructor(int.class, String.class);
User user4 = constr2.newInstance(3, "user4");

对于参数,需要在 getConstructor 方法中提供参数类型,然后在调用 newInstance 方法时添加参数值。

这是示例的完整打印输出。

package com.admfactory.reflect;
import java.lang.reflect.Constructor;
public class ContructorTest {
    public static void main(String[] args) throws Exception {
	System.out.println("Contructor instantiation using reflection example");
	System.out.println();
	System.out.println("Normal instantiation");
	System.out.println();
	User user1 = new User();
	System.out.println();
	User user2 = new User(2, "user2");
	System.out.println();
	System.out.println("Instantiation using reflection");
	System.out.println();	
	Class<User> clazz = User.class;	
	Constructor<User> constr1 = clazz.getConstructor();
	User user3 = constr1.newInstance();	
	Constructor<User> constr2 = clazz.getConstructor(int.class, String.class);
	User user4 = constr2.newInstance(3, "user4");
    }
}

输出

Contructor instantiation using reflection example
Normal instantiation
User object has been created using constructor User()
User object has been created using constructor User(2, user2)
Instantiation using reflection
User object has been created using constructor User()
User object has been created using constructor User(3, user4)

您会注意到,使用 new 关键字或使用反射这两种获取新对象的方法都会生成相同的输出。如果您想了解更多相关知识,不妨来关注一下本站的Java星辉在线学习,里面的课程内容由浅到深,细致全面,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交