--作业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 13:45:48 浏览: 135
好的,以下是实现方法:
```java
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws Exception {
// 通过 Scanner 获取输入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入类的全名:");
String className = scanner.nextLine();
System.out.println("请输入属性值,格式为:属性1=值1,属性2=值2,...");
String input = scanner.nextLine();
// 调用 reflectObject 方法生成对象
Object obj = reflectObject(className, input);
// 打印生成的对象
System.out.println(obj);
}
public static Object reflectObject(String packageClassName, String input) throws Exception {
// 通过类的全名获取对应的 Class 对象
Class<?> clazz = Class.forName(packageClassName);
// 通过 Class 对象创建实例对象
Object obj = clazz.newInstance();
// 解析属性值字符串
String[] kvPairs = input.split(",");
for (String kvPair : kvPairs) {
// 解析属性名和属性值
String[] kv = kvPair.split("=");
String fieldName = kv[0].trim();
String fieldValue = kv[1].trim();
// 获取类中的属性对象
Field field = clazz.getDeclaredField(fieldName);
// 设置属性值
if (field.getType().equals(String.class)) {
field.set(obj, fieldValue);
} else if (field.getType().equals(int.class)) {
field.set(obj, Integer.parseInt(fieldValue));
} else if (field.getType().equals(double.class)) {
field.set(obj, Double.parseDouble(fieldValue));
}
}
return obj;
}
}
```
使用方法如下:
```
请输入类的全名:
com.gec.Person
请输入属性值,格式为:属性1=值1,属性2=值2,...
name=admin,sex=男,age=38,money=10000.0
Person{name='admin', sex='男', age=38, money=10000.0}
```
注意,这里我假设了属性值中不会出现空格,如果有空格的话需要使用更严谨的字符串解析方法。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)