在javase中,设计一个学生管理系统,其中学生类有姓名性别学号等等属性,在工具类中有一个方法需要修改学生信息,如何对需要修改学生判断需要修改的是哪一个属性?
时间: 2024-11-11 21:42:05 浏览: 15
在Java SE中,设计一个学生管理系统时,我们可以创建一个`Student`类来表示学生,包含姓名(name)、性别(gender)和学号(studentId)等属性。对于工具类中的方法,我们可以通过定义每个学生对象的数据结构,例如一个Map或者POJO(Plain Old Java Object),来存储这些属性及其对应的值。
假设`Student`类是这样的:
```java
public class Student {
private String name;
private String gender;
private String studentId;
// 构造器, getters 和 setters
public Student(String name, String gender, String studentId) {
this.name = name;
this.gender = gender;
this.studentId = studentId;
}
// getters and setters...
}
```
然后,我们可以创建一个工具类`Utils`,其中有方法`updateStudentInfo(Student student, String property, String newValue)`,这个方法接受学生对象、要更新的属性名以及新的值。为了判断需要修改哪个属性,我们可以使用`if...else`语句或者`switch`语句来检查传入的`property`字符串:
```java
import java.util.Map;
public class Utils {
private static final Map<String, Method> UPDATE_METHODS = new HashMap<>();
static {
try {
UPDATE_METHODS.put("name", Student.class.getMethod("setName", String.class));
UPDATE_METHODS.put("gender", Student.class.getMethod("setGender", String.class));
UPDATE_METHODS.put("studentId", Student.class.getMethod("setStudentId", String.class));
} catch (NoSuchMethodException e) {
throw new RuntimeException("Error setting up update methods", e);
}
}
public void updateStudentInfo(Student student, String property, String newValue) {
if (UPDATE_METHODS.containsKey(property)) {
Method method = UPDATE_METHODS.get(property);
try {
method.invoke(student, newValue);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
throw new RuntimeException("Failed to update student's " + property + " with value " + newValue, e);
}
} else {
throw new IllegalArgumentException("Invalid property: " + property);
}
}
}
```
在这个例子中,我们首先预定义了可能需要更新的属性方法映射到它们的getter方法。然后在`updateStudentInfo`方法内部,根据`property`查找对应的方法并执行。如果找不到合适的属性,则抛出异常。
阅读全文