Scanner(System.in)是否被视为组合的一个例子

时间:2016-08-03 14:01:22

标签: java

我刚才正在学习作文。 Scanner(System.in)会被视为组合的一个例子吗?

1 个答案:

答案 0 :(得分:0)

是的,是的。

关键是Scanner “某事”,它可以从中读取数据,并且知道如何将这些数据处理成令牌。

“某事”可以是标准输入,文件,字符串等;但是没有一个单独的子类可以从这些东西中读取每一个。实际上,您无法扩展Scanner,因为它是final

new Scanner(System.in)可能会让您感到有趣的是,Scanner并未直接保留System.in:如果您查看constructor's source code,您会看到:

public Scanner(InputStream source) {
  this(new InputStreamReader(source),    
      WHITESPACE_PATTERN);
}

private Scanner(Readable source, Pattern pattern) {
  // ...
  this.source = source;
   // ...
}

source(例如System.in)包含在InputStreamReader中,而 Scanner保留。所以你有两个层次的组合:

  • Scanner有一个ReadableInputStreamReader);
  • InputStreamReader有一个InputStream(例如System.in)。