gpt4 book ai didi

Java 获取已知类名的现有对象列表(动态)

转载 作者:行者123 更新时间:2023-12-01 10:19:41 25 4
gpt4 key购买 nike

我有一个包含 2 个不同对象类型的列表的类。

List<Student> students;
List<Lecturer> lecturers;

每个都有一个返回字符串的方法。我想从该字符串中找到一些内容,并且我要创建的方法对于两个列表、类(class)名称(学生/讲师)、列表名称(学生/讲师)和方法将相同 name(studentMethod/lecturerMethod) 是唯一不同的。

知道了 className、listName 和 methodName,我怎样才能获得正确的列表(称为 listName),以便我可以从列表中的每个对象调用所需的方法(称为 methodName)。

附注:我知道为每个列表创建 2 个单独的方法会更容易,但我希望我的代码是 DRY 的,并且还可以了解有关 OOP 原则的更多信息。

示例:如果我想获取学生列表,然后为每个学生调用 StudentMethod,我应该有这样的内容:

void dryMethod(String className, String listName, String methodName) {
Class<?> desiredClass = Class.forName(className);
List<desiredClass> desiredList = getListByName(listName);
Method desiredMethod = getMethodByName(methodName);
for(desiredClass object : desiredList){
manipulateString(object.desiredMethod());
}
}
dryMethod("Student","students","studentMethod");

可能吗?

最佳答案

创建一个父抽象类/接口(interface)来定义两个类都应该定义的方法。例如:

public interface Person {
public void desiredMethod();
}

// Student will have to give an implementation for desiredMethod()
public class Student implements Person

// Lecturer will have to give an implementation for desiredMethod()
public class Lecturer implements Person

然后让 dryMethod 使用实现 Person 的类型列表:

void dryMethod(List<? implements Person> myList) {
// you can use List<Student> and List<Lecturer> as myList
for (Person person : myList) {
person.desiredMethod();
}
}

我建议您阅读一些有关 Polymorphism 的信息.

编辑:声明列表时,您可以执行以下操作:

List<Student> students;  // only Student class allowed
List<Lecturer> lecturers; // only Lecturer class allowed
List<Person> students; // both Student and Lecturer class allowed

关于Java 获取已知类名的现有对象列表(动态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35682209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com