用classpath.properties文件存储User类路径全名,读取配置文件,并用反射的思想完成user对象的创建、属性赋值、方法调用。 配置文件配置例如:classpath=com.itgaohe.User
时间: 2024-02-27 18:55:35 浏览: 69
反射实现两个类的对象之间相同属性快速赋值,数据源实体和目标实体将进行转换
好的,您可以参考以下代码实现:
User.java
```java
public class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello() {
System.out.println("Hello, I'm " + name + ", " + age + " years old.");
}
}
```
classpath.properties
```properties
classpath=com.itgaohe.User
```
Main.java
```java
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Main {
public static void main(String[] args) {
try {
// 读取配置文件
InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("classpath.properties");
Properties properties = new Properties();
properties.load(inputStream);
// 获取User类路径全名
String className = properties.getProperty("classpath");
// 通过反射创建User对象
Class<?> clazz = Class.forName(className);
Object object = clazz.newInstance();
// 通过反射给User对象的属性赋值
clazz.getDeclaredField("name").setAccessible(true);
clazz.getDeclaredField("name").set(object, "Tom");
clazz.getDeclaredField("age").setAccessible(true);
clazz.getDeclaredField("age").set(object, 20);
// 通过反射调用User对象的方法
clazz.getDeclaredMethod("sayHello").invoke(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
解释说明:
1. 在配置文件中配置了User类的全路径名,即com.itgaohe.User。
2. 通过反射的方式创建了User对象,并通过反射的方式给User对象的属性赋值,最后通过反射调用了User对象的方法。
3. 需要注意的是,这里的配置文件是在classpath下的,所以需要使用ClassLoader的getResourceAsStream()方法来读取配置文件。
阅读全文