java程序实现字符串转对象
时间: 2023-09-16 14:08:01 浏览: 44
Java中字符串转对象可以使用反射机制来实现,具体实现步骤如下:
1. 获取要转换的对象的类名和构造方法参数类型,如下所示:
```java
String className = "com.example.Student"; // 要转换的类名
Class<?> clazz = Class.forName(className); // 获取对应的Class对象
Constructor<?> constructor = clazz.getConstructor(String.class, int.class); // 获取构造方法
```
2. 创建要转换的对象实例,如下所示:
```java
Object obj = constructor.newInstance("Tom", 18); // 创建对象实例
```
3. 将字符串中的属性值赋值给对象的属性,如下所示:
```java
String values = "score=90,gender=male"; // 字符串中的属性值
String[] pairs = values.split(","); // 拆分属性值
for (String pair : pairs) {
String[] parts = pair.split("="); // 拆分属性名和属性值
String name = parts[0];
String value = parts[1];
Field field = clazz.getDeclaredField(name); // 获取属性
field.setAccessible(true); // 设置属性可访问
if (field.getType() == int.class) {
field.setInt(obj, Integer.parseInt(value)); // 赋值int类型的属性
} else {
field.set(obj, value); // 赋值其他类型的属性
}
}
```
完整的代码实现如下所示:
```java
import java.lang.reflect.*;
public class StringToObject {
public static void main(String[] args) throws Exception {
String className = "com.example.Student"; // 要转换的类名
Class<?> clazz = Class.forName(className); // 获取对应的Class对象
Constructor<?> constructor = clazz.getConstructor(String.class, int.class); // 获取构造方法
Object obj = constructor.newInstance("Tom", 18); // 创建对象实例
String values = "score=90,gender=male"; // 字符串中的属性值
String[] pairs = values.split(","); // 拆分属性值
for (String pair : pairs) {
String[] parts = pair.split("="); // 拆分属性名和属性值
String name = parts[0];
String value = parts[1];
Field field = clazz.getDeclaredField(name); // 获取属性
field.setAccessible(true); // 设置属性可访问
if (field.getType() == int.class) {
field.setInt(obj, Integer.parseInt(value)); // 赋值int类型的属性
} else {
field.set(obj, value); // 赋值其他类型的属性
}
}
System.out.println(obj); // 输出转换后的对象
}
}
class Student {
private String name;
private int age;
private int score;
private String gender;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void setScore(int score) {
this.score = score;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
", gender='" + gender + '\'' +
'}';
}
}
```
输出结果为:
```
Student{name='Tom', age=18, score=90, gender='male'}
```