Java获取已知类名的现有对象列表(动态)
我有一个类,包含两个不同对象类型的列表
List<Student> students;
List<Lecturer> lecturers;
每个类都有一个返回字符串的方法。我想从这个字符串中找到一些东西,我将为两个列表创建相同的方法,只有类名(学生/讲师)、列表名(学生/讲师)和方法名(学生方法/讲师方法)不同
知道类名、listName和methodName之后,我如何才能获得正确的列表(称为listName),这样我就可以从列表中的每个对象调用所需的方法(称为methodName)
附言:我知道为每个列表创建两个单独的方法会更容易,但我希望我的代码是干巴巴的,同时也希望了解更多关于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");
可能吗
# 1 楼答案
创建一个父类抽象类/接口,定义两个类都应该定义的方法。例如:
然后让dryMethod使用实现
Person
的类型列表:我建议你阅读一些关于Polymorphism的信息
编辑:声明列表时,您可以执行以下操作:
# 2 楼答案
要问自己的一件事是,如果你有两个类和两个方法,它们做的事情几乎相同,那么这两个方法实际上应该有相同的名称,并且由相同的接口指定吗
即使不是这样,你也不必放弃干货。您可以用一种常用方法定义字符串处理逻辑,并使用流运算符
map
将students
和lecturers
转换为String
的流:这是FP风格,而不是OOP风格。在不同类型上执行泛型操作的一个好OOP方法是使用Visitor design pattern,但与流相比,这需要编写相当多的样板代码