2016-08-03 2 views

ответ

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) заворачивают в a InputStreamReader, и это , что, которое удерживается Scanner. Таким образом, у вас есть два уровня композиции:

  • Scanner имеет Readable (InputStreamReader);
  • InputStreamReader имеет InputStream (например, System.in).
Смежные вопросы