专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 如何通过反射创建对象

如何通过反射创建对象

更新时间:2022-12-02 09:51:05 来源:星辉 浏览385次

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星辉在线学习,里面的课程内容由浅到深,细致全面,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>