gpt4 book ai didi

java - 为什么 Java.NIO 使用静态方法?

转载 作者:行者123 更新时间:2023-12-01 09:40:50 25 4
gpt4 key购买 nike

我想知道为什么 java.nio 是基于静态方法的,我的意思是在 java.io 你创建一个文件然后使用他的方法,是这样的:

File file = new File("myFile");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String readLine = bufferedReader.readLine();

每个对象都有自己的方法。

java.nio 以不同的方式工作,您使用静态方法,它会强制您始终将文件作为参数传递。

Path file = Paths.get("myFile");
BufferedReader bufferedReader = Files.newBufferedReader(file);
String readLine = bufferedReader.readLine();

Path source = Paths.get("source");
Path target = Paths.get("target");
Files.copy(source, target);

由于 nio 直接在类中提供了有用的方法(如 newBufferedReader),因此要编写的代码更少。 但它也可以在实例方法中完成,因此您不必将路径作为参数传递。

为什么要改变范式?隐藏的优势是什么?

最佳答案

在您展示的示例中,模式是隐藏工厂方法后面的构造函数调用。

这是一个非常完善的方法,允许实现在实际返回什么样的实现方面具有灵 active 。这允许在那里封装复杂的逻辑以及 future 的发展。即使它不适用于您引用的示例,也可能根本不创建新实例,而是返回池化或缓存的副本(如 Integer.valueOf 而不是 new整数).

如果直接调用构造函数,就没有办法实现这种灵 active 。

There is less code to write since nio provides useful methods (like newBufferedReader) directly in the class. but it could have been done in instance methods as well so you wouldn't have to pass a path as parameter.

path.newBufferedReader() 之类的东西可能是这些类之间的耦合过于紧密。他们希望 Path 成为表示文件系统路径的类。它不需要知道人们可能想对文件做的所有事情。集中且独立的类有助于实现模块化。

对于较旧的 API,他们采用了另一种方式,请查看 String#replaceAll。在这里,理解正则表达式的整个逻辑已经集成在String类中。

关于java - 为什么 Java.NIO 使用静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60526318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com