使用输入流构造对象是不好的做法吗?

时间:2016-06-01 14:01:14

标签: java

从文件中读取数据时,将流/读取器传递给容器类是不好的做法,而不是在调用方法中读取数据,然后将值作为参数传递?

例如

public DummyClass(DataInputStream input) throws IOException {
    this.valueA = input.readInt();
    this.valueB = input.readInt();
}

反对

public DummyClass(int a, int b) {
    this.valueA = a;
    this.valueB = b;
}

3 个答案:

答案 0 :(得分:3)

这取决于代码的类型。

如果您的代码与流相关,则直接从流构建对象是正确的。

如果构建与流无关的对象,那么作为参数传递流是一种不好的做法,因为您可以耦合彼此不相关的对象。

这里有一些例子:

使用流参数

  • 转换另一个流中的流的类
  • 将流转换为迭代器的类
  • 从流中构建对象的类,如json流。

没有流

  • 从Stream创建Point的类。因为Point与流无关

答案 1 :(得分:1)

这取决于对象的目的。

如果这是一个域对象,将它与任何存储/传输表示相结合是件好事。

但是,如果这是一个旨在实现编码/解码方案的对象,那么它就是一个合理的构造函数。

答案 2 :(得分:1)

根据我的观点,你不应该在你的班级中传递Stream对象。因为现在

  1. 我们给了类(DummyClass)更多的责任来读取数据,这不是它的工作。
  2. DummyClass会更加耦合。
  3. 如果需要,我们没有灵活性从其他资源传递数据。