java - 重构ArrayList写入文件

标签 java refactoring

我不确定如何有效地重构以下代码。

在下面的代码中,有两种方法将数据写入文件。它们非常相似,除了:

  • 第一个方法接受单个对象参数,然后调用外部方法进行写入
  • 第二个方法接受对象的 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/

相关文章:

java - 在 Java 应用程序中使用的 OpenCV JNI 库中的内存使用跟踪工具

java - Java 8 默认接口(interface)中 `this` 的静态类型是什么?

java - 通过父实体更新删除添加子实体列表

java - 如何重构这个 Java 方法以更好地利用 OOP

java - Dmaven.multiModuleProjectDirectory 系统属性未设置

java - 模拟抽象类

java - 使用流畅的接口(interface)重构长方法

c++ - 是否有用于 C++ 项目的类似 ReSharper 的工具?

c++ - 一个有大小限制的类STL容器应该如何实现?

java - IntelliJ IDEA : Exception removal will break source code. 是否继续?