java - 如何重构具有相同结构、不同类的方法(Java)

标签 java generics refactoring abstract fileinputstream

重构具有相同逻辑但使用不同类的方法的最佳方法是什么(在 Java 中)?这么说吧

Method1(FileInputStream obj, OutputStream o){
  //stuff
  while(something){
    //---
    //some code
    //---
    obj.read();
    //---
    //some code
    //---
    o.write(..);
    //code
  }
  //code
}

然后我就有了

Method2(InputStreamReader obj, OutputStreamWriter os){
  //stuff
  while(something){
    //---
    //some code
    //---
    obj.read(..);
    //---
    //some code
    //---
    os.write();
    //code
  }
  //code
}

一种方法处理二进制文件,另一种方法处理文本。理想情况下,我想要的是有一个读取过程写入并隐藏所有特定信息

最佳答案

最好的方法是使用正确的接口(interface):

void method2(Reader obj, Writer os){
   // code...   
}

然后像这样使用InputStreams

method2(new InputStreamReader(fileInputStream), new OutputStreamWriter(outputstream));

为什么这样更好?

这更好,因为您正在抽象该方法的工作方式。您是说您不关心实现是什么,只要它符合 ReaderWriter 即可。因此,用户有责任将 InputStream 更改为 Reader不是你的。如果其中抛出异常,那么您不需要需要捕获它。它被抛出到客户端代码中。这是一个重要的说明。

关于java - 如何重构具有相同结构、不同类的方法(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286982/

相关文章:

java - “如何删除 sqlite 数据库中正确的 ListView 项目

java - 在 Java 的 ActiveDirecotry 中通过 LDAP 解析对象的 GUID 来获取对象的名称

java - 没有类类型的通用方法?

visual-studio-2010 - 是否有一种解决方案范围的方法来取消整个文件的列表化

java - Android SQLite 在使用 onCreate() 方法首次加载插入 ContentValues 后为空

java - Minecraft 模组 ".bindTexture"不起作用

Swift 泛型与任何泛型

java - 带有泛型的 CustomLinkedList

c# - 有没有更有效的方法来基于现有列表和查找列表创建列表?

refactoring - 你做过哪些成功的软件转换/重写?