我不确定如何有效地重构以下代码。
在下面的代码中,有两种方法将数据写入文件。它们非常相似,除了:
- 第一个方法接受单个对象参数,然后调用外部方法进行写入
- 第二个方法接受对象的 ArrayList 作为参数,并循环遍历 ArrayList 以执行写入,直接调用编写器。
常识告诉我,这可以重构为单个写入方法,然后这两个方法将调用该方法,但不确定如何实现这一点。
public void updateAccount(Account account) {
String outputString = outputStringCreator(account);
writeOutputString(outputString);
}
public void updateAccounts(ArrayList<Account> accounts) {
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(filePath));
for(Account account : accounts) {
writer.write(outputStringCreator(account));
writer.newLine();
}
} catch (IOException e) {
System.out.println("IO issue: " + e.getMessage());
}
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
System.out.println("Couldn't close writer: " + e.getMessage());
}
}
}
public void writeOutputString(String outputString) {
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(filePath));
writer.write(outputString);
writer.newLine();
} catch (IOException e) {
System.out.println("IO issue: " + e.getMessage());
}
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
System.out.println("Couldn't close writer: " + e.getMessage());
}
}
}
最佳答案
您可以轻松简化重载方法,其中一个方法采用单个参数,其他方法采用集合,如下所示:
void foo( ObjectType object ) {
//pack object into singleton list
foo( List.of( object ) );
}
void foo( List< ObjectType > objects ) {
//execute logic on collection
}
采用集合的方法应该能够处理列表只有一个元素的情况。这样您就可以轻松地从重载方法传递单例列表并只编写单个算法。
关于java - 重构ArrayList写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235371/