【发布时间】:2021-04-24 04:10:46
【问题描述】:
我有输出函数,可以将来自不同对象的数据输出到它们对应的文件中。这些函数中的大多数都遵循相同的模式,唯一的区别是所使用的对象以及所使用的对象的固有方法。
我将 'obj' 传递给所有写入函数,并且在每个单独的写入函数中,我们调用不同的 'obj.get...' 函数来获取不同的对象以获取数据并输出。
我的输出函数是这样调用的:
for (Object obj : objects) {
writer.writeSubOject1(obj, dir, "subObject1.csv", true);
writer.writeSubOject2(obj, dir, subObject2.csv, true);
....
}
写函数的代码:
public class Writer{
public void writeSubOject1(Object obj, File dir, String filename, Boolean append) {
ArrayList<SubObject1> subObject1 = obj.getSubObject1();
try {
log.info("writing " + filename + "...");
ArrayList<String[]> so1Data = SubObject1.getData(subObject1);
final File out = CreateFileObject(dir, filename);
writeCsv(so1Data, out, append);
} catch (Exception e) {
log.info("Error in writeSubOject1");
log.error(e);
e.printStackTrace();
}
}
public void writeSubOject2(Object obj, File dir, String filename, Boolean append) {
ArrayList<SubObject2> subObject2 = obj.getSubObject2();
try {
log.info("writing " + filename + "...");
ArrayList<String[]> so2Data = SubObject2.getData(subObject2);
final File out = CreateFileObject(dir, filename);
writeCsv(so2Data, out, append);
} catch (Exception e) {
log.info("Error in writeSubOject2");
log.error(e);
e.printStackTrace();
}
}
}
您可以看到,这两个方法之间的唯一区别是 obj.getSubObjectX() 调用,以及在 SubObject1 中具有唯一实现的 getData() 方法和 2.
有没有更好的方法来消除重复代码?
【问题讨论】:
标签: java oop interface coding-style code-duplication