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

时间:2012-09-05 17:44:40

标签: 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
}

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

2 个答案:

答案 0 :(得分:2)

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

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

然后像InputStreams

一样使用它
method2(new InputStreamReader(fileInputStream), new OutputStreamWriter(outputstream));

为什么这样更好?

这样做更好,因为您抽象出方法的工作方式。你说你不关心实现是什么,只要它符合ReaderWriter。因此,用户有责任将InputStream更改为Reader不是你的。如果有异常,那么不要需要抓住它。它被抛在客户端代码中。这是一个重要的注意事项。

答案 1 :(得分:0)

你不能读写相同的东西,除了名字之外没有任何共同之处。使它们变得通用的唯一方法是将二进制和文本写为二进制,即最后它们都转为二进制。