我有几个将文件名作为参数的方法。我的疑问是,有什么更好的方法来声明这些方法的参数。
参数是否应该是类型
String
void normalizeData(String inFile)
或者我应该将参数显式声明为
File
.void normalizeData(File inFile)
就我个人而言,我觉得File
更直观,但想知道这些事情的最佳实践是什么。
我会通过java.io.InputStream
- 这使代码更容易测试并且不会将其绑定到文件系统。
这样你的代码最终会像:
public void normalizeData(InputStream in)
{
...
}
并称它为:
myObject.normalizeData(new FileInputStream(myFile));
或者
myObject.normalizeData(new FileInputStream("c:/myfile.txt"));
或者在测试中
myObject.normalizeData(new ByteArrayInputStream("some test data".getBytes()));
考虑使用多个重载方法为 API 的用户提供选择。
还要考虑传递一个InputStream
,因为 API 的用户可能希望使用任何内存中的数据表示。
设计取决于许多参数,例如,谁将使用此方法。它是否会被重载,是内部的、包级别的还是公共 API。我倾向于笼统地提供两种重载方法:
Path
which 是指定文件路径的常用方法和一个传入InputStream
,即输入字节流的一般表示
public void normalizeData(Path filePath) //Path是指定文件路径的常用方式
public void normalizeData(InputStream) //输入流字节的一般表示
但正如我所说,这取决于您的项目规范。
这取决于您是希望文件 hanlde 在 normalizeData 方法之外还是仅在其内部。如果您想在调用 normalizeData 方法之前或之后对文件执行某些操作,则在 normalizeData 方法之外创建一个文件对象并将引用传递给该方法。如果只有您的 normalizeData 方法需要处理文件对象,那么只需将文件名传递给它。
取决于您的需要以及您希望如何处理文件。
如果您传递字符串,则您可以控制文件打开方式和文件句柄管理的方法。您正在集中该代码。如果您传递File
对象,那么您将在任何地方复制文件处理代码。所以我对前者有强烈的偏好。