--作业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-18 12:39:07 浏览: 84
好的,我来解答你的问题。
首先,我们需要使用反射机制来动态生成对象,并且初始化对象中的属性值。下面是实现该方法的代码:
```java
public static Object reflectObject(String package_class_name, String input) throws Exception {
// 使用反射机制加载类
Class<?> clazz = Class.forName(package_class_name);
// 创建实例对象
Object obj = clazz.newInstance();
// 分解属性值
String[] attrs = input.split(",");
// 遍历属性值,设置对象的属性值
for (String attr : attrs) {
String[] keyValue = attr.split("=");
String key = keyValue[0].trim();
String value = keyValue[1].trim();
// 获取属性类型
Field field = clazz.getDeclaredField(key);
Class<?> fieldType = field.getType();
// 设置属性值
if (String.class == fieldType) {
field.set(obj, value);
} else if (int.class == fieldType) {
field.setInt(obj, Integer.parseInt(value));
} else if (double.class == fieldType) {
field.setDouble(obj, Double.parseDouble(value));
}
}
return obj;
}
```
上述代码中,我们首先使用反射机制加载类,然后创建实例对象。接着,我们将输入的属性值分解成键值对,遍历键值对,并使用反射机制设置对象的属性值。
现在,我们可以通过以下代码来调用 `reflectObject` 方法,生成对象并打印:
```java
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入类的全名:");
String className = scanner.nextLine();
System.out.print("请输入属性值:");
String input = scanner.nextLine();
Object obj = reflectObject(className, input);
System.out.println(obj);
}
```
当我们输入 `com.gec.Person` 和 `name=admin,sex=男,age=38,money=100.0` 时,将会生成一个 `Person` 对象,并给该对象赋值 `admin`、`男`、`38` 和 `100.0`,最后通过调用 `toString` 方法打印对象的属性值。
当我们输入 `com.gec.Teacher` 和 `name=Tom,sex=男,age=30,level=3` 时,将会生成一个 `Teacher` 对象,并给该对象赋值 `Tom`、`男`、`30` 和 `3`,最后通过调用 `toString` 方法打印对象的属性值。
阅读全文