gpt4 book ai didi

java - 如何使用泛型或函数类避免代码中的重复

转载 作者:行者123 更新时间:2023-12-02 15:49:56 25 4
gpt4 key购买 nike

private <Y> void meth(
MyObj ds, MultiValueMap<String, List> mvm, Class<Y> data) {



if(data.isAssignableFrom(Employee.class)) {
for (Employee rd : (List<Employee>) mvm.get(0).get(1)) {

for (String cName : (List<String>) mvm.get(0).get(0)) {
ds.setCellValue((String)rd.getDataElement(cName));

}

}
}

if(data.isAssignableFrom(Department.class)) {
for (Department rd : (List<Department>) mvm.get(0).get(1)) {

for (String cName : (List<String>) mvm.get(0).get(0)) {
ds.setCellValue((String)rd.getDataElement(cName));

}

}
}


//some more similar if conditions as above

}

在上面,我有类似的 10 if 条件,如何避免上面的重复代码?我是否需要使用任何 Java 8 Function 类作为参数来避免重复代码(或)必须使用任何额外的泛型代码?

最佳答案

所以看起来您需要的是继承而不是泛型。在你的 if 条件下,你总是在对象上转换和调用相同的方法。所以你可以做的是定义一个看起来像这样的接口(interface):

public interface MyInterface {
String getDataElement(String name);
}

并在您的员工、部门和您拥有的其他类中实现它。


如果方法总是做同样的事情,你可以使用默认或抽象类来不总是写相同的:

public interface MyInterface {
default String getDataElement(String name) {
//do your thing
return value;
}
}
public abstract class MyAbstractClass {
public String getDataElement(String name) {
//do your thing
return value;
}
}

现在您可以将meth 方法更改为:

private void meth(MyObj ds, MultiValueMap<String, List> mvm) {
List<MyInterface> list = (List<MyInterface>) mvm.get(0).get(1));

for (MyInterface rd : list) {
List<String> cNames = (List<String>) mvm.get(0).get(0);
for (String cName : cNames) {
ds.setCellValue((String) rd.getDataElement(cName));
}
}
}

关于java - 如何使用泛型或函数类避免代码中的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72847847/

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