“新文件”是多余的

aij0ehis  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(460)

我有以下代码:

try(ObjectOutputStream o=new ObjectOutputStream(new FileOutputStream(new File("users.dat")))){
    o.writeObject(users);
}

我的ide发出警告: 'new File' is redundant 我理解 FileOutputStream 有一个重载的构造函数,它接受一个字符串作为它的路径,但是创建一个新的文件对象不是更好的做法吗?如果没有,怎么会这样?

gcxthw6b

gcxthw6b1#

但是创建一个新的文件对象不是更好的做法吗?
实践是有目的的。不了解目的,你只是盲目地应用这些精练的规则,只是希望严格地应用过于简单的规则能让你成为一个好的程序员。
不幸的是,编码并不是那么简单。
那么,这种做法试图达到什么目的呢?
也许这个想法是:事物应该以它们的本来面目来表达; users.dat 是一个路径,所以它应该在路径对象中,而不是字符串中。
这不是一个坏主意,但在这里,信息是转瞬即逝的。不存储在任何变量中,并且您正在将字符串传递给该类型的构造函数 FileOutputStream 当然消除了所有的怀疑。
这不是演习的重点吗?使代码更清晰?这里不适用。
当然,它也可能适用于其他情况。但是,您选择这样做:这不是basic java生成的警告;你选择了一个能做到这一点的线头工具。
你会发现,这些精练、过于简单化的格言试图把一个好主意变成一个僵硬的规则,它们不可避免地会发生冲突,一个好主意的僵硬应用与另一个好主意的僵硬应用相互排斥。
避免无意义的 Package 也是一个好主意。它会使代码变得不必要的长,并且可能会提示您以非惯用的方式编写代码(毕竟 FOS 存在接受字符串的构造函数。除非你认为这个构造器在任何情况下都是被禁止的……)
解决方法很简单:编写好代码?这需要一个好的程序员。一个脱毛工具就是这样。工具。它不会自己写代码。如果你在这里感到不安,你也许有道理。然后关掉它。
注意:事实上,您使用的旧api使用的是有点可疑的术语“文件”,而它真正代表的是一个路径,在这里没有帮助。退房 java.nio.file -我也不太喜欢第二次使用api,但至少它比java.io.file好。

5anewei6

5anewei62#

因为用字符串创建fileoutputstream做了完全相同的事情。

public FileOutputStream(String name) throws FileNotFoundException {
    this(name != null ? new File(name) : null, false);
}

相关问题