--作业1:定义一个方法 reflectObject(String package_class_name,String input) 该方法用于生成package_class_name所对应的类的实例对象,并初始化对象中的属性值。 举例: 入参:com.gec.Person, name=admin,sex=男,age=38,则生成一个Person对象,并给该对象赋值admin,男,38 要求: --现有Teacher类【String name、String sex、int age、int level】 --现有Person类【String name、String sex、int age、double money】 --通过Scanner分别输入类的全名和input字符串,然后调用reflectObject方法,生成对象并打印
时间: 2024-03-17 07:45:40 浏览: 111
好的,我已经理解了您的要求,请看下面的代码实现:
```java
import java.lang.reflect.Field;
public class ReflectDemo {
public static void main(String[] args) {
//通过Scanner获取类的全名和输入的字符串
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要创建对象的类的全名(例如com.gec.Person):");
String className = scanner.nextLine();
System.out.print("请输入要初始化的参数(例如name=admin,sex=男,age=38):");
String input = scanner.nextLine();
//调用reflectObject方法
Object obj = reflectObject(className, input);
//打印对象
System.out.println(obj.toString());
}
public static Object reflectObject(String packageClassName, String input) {
try {
//获取类对象
Class<?> clazz = Class.forName(packageClassName);
//创建实例对象
Object obj = clazz.newInstance();
//解析输入参数
String[] params = input.split(",");
for (String param : params) {
String[] kv = param.split("=");
//获取属性对象
Field field = clazz.getDeclaredField(kv[0]);
//设置属性可访问性
field.setAccessible(true);
//根据属性类型设置属性值
if (field.getType() == String.class) {
field.set(obj, kv[1]);
} else if (field.getType() == int.class) {
field.set(obj, Integer.parseInt(kv[1]));
} else if (field.getType() == double.class) {
field.set(obj, Double.parseDouble(kv[1]));
}
}
return obj;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
```
您可以根据自己的需要修改类的属性和输入的参数。如果您有任何问题,请告诉我。
阅读全文