Java 如何根据方法参数更改代码? publicstaticvoidcalculate(列表数据、字符串类别类型){ 对于(int i=0;i
如果看到Java 如何根据方法参数更改代码? publicstaticvoidcalculate(列表数据、字符串类别类型){ 对于(int i=0;i,java,methods,Java,Methods,如果看到data.get(i).calculateCategoryOne(),则方法调用是针对类别1的。问题是,我需要将每个类别的整个代码复制粘贴到if块中,以便只更改此方法调用data.get(I).calculateCategoryTwo(),data.get(I).calculateCategoryThree()data.get(i).calculateCategoryTen() 虽然我仍然可以用这种方式使逻辑工作,但我觉得这是多余的,不是一个好的编程实践。只需更改一行代码,我就必须将同一
data.get(i).calculateCategoryOne()
,则方法调用是针对类别1的。问题是,我需要将每个类别的整个代码复制粘贴到if块中,以便只更改此方法调用data.get(I).calculateCategoryTwo()
,data.get(I).calculateCategoryThree()
data.get(i).calculateCategoryTen()
虽然我仍然可以用这种方式使逻辑工作,但我觉得这是多余的,不是一个好的编程实践。只需更改一行代码,我就必须将同一代码复制十次,这将添加近500行代码
所以,我的问题是:是否有一种方法可以基于category类型字符串参数动态更改我的方法调用
我在想一种可能的方法是以字符串形式传递方法调用,并将其转换为方法调用本身。例如,假设CategoryType字符串参数是“calculateCategoryOne()”
。因此,data.get(i)。“calculateCategoryOne()”
将被编译器识别为方法调用本身。有没有一种方法可以真正实现这一点
我也愿意接受其他减少冗余的想法。我认为在这里使用功能接口是合适的。根据categoryType的不同,您需要不同的功能,因此传入您想要使用的函数,而不是它的字符串表示,就可以实现这一点
public static void calculate(List<Person> data, String categoryType) {
for(int i = 0; i < categoryData.size(); i++) {
if(data.get(i).calculateCategoryOne() == firstPlace) {
...
}
}
}
或者,如果这种情况经常发生,您可以预先定义一次您的类别并将其传入:
calculate(list, p -> {
// calculation done here
});
您可以使用反射,但可能不使用。如果唯一的改变是调用哪个方法,它可以被抽象成另一个方法,或者移动到任何
数据中,我不知道为什么你需要剪切和粘贴整个代码块。get(I)
返回,或者…你的方法calculateCategoryOne()
做什么,它返回什么?什么是firstPlace
,与参数categoryType
有什么关系,您至少在代码段中没有使用该参数?一般来说,你想要实现什么?为什么你的类Person
有十种不同的方法来做同样的事情?
calculate(list, p -> {
// calculation done here
});
Calculate categoryOne = p -> { ... };
Calculate categoryTwo = p -> { ... };
.
.
calculate(list, categoryOne);