我刚才正在学习作文。 Scanner(System.in)会被视为组合的一个例子吗?
答案 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
有一个Readable
(InputStreamReader
); InputStreamReader
有一个InputStream
(例如System.in
)。