Поскольку Scanner
является final
вы не можете объявить подкласс этого. Период.
- Отражение не будет работать/помогать.
- Байт-технические трюки не будут работать/помогать.
принципе, вы можете изменить Scanner
класса, чтобы удалить модификатор final
. Однако тот факт, что это класс, находится в одном из зарезервированных пакетов, означает, что вам потребуется изменить установку Java, чтобы это произошло. (Возможно, вы также сможете это сделать, изменив bootclasspath ... но это то же самое.)
Но, если честно, если нет необходимости изменять Scanner
. Вместо этого вы можете просто скопировать исходный код Scanner
(например, из базы данных OpenJDK) и использовать его для создания «несвязанного» класса в пространстве приложения вашего приложения с дополнительным методом. Это не будет по типу, связанным с реальным классом Scanner
, но это вряд ли вызывает беспокойство.
Для записи:
Это Q & A - https://stackoverflow.com/a/18746676/139985 - обеспечивает некоторые возможные причины того, почему Scanner
не поддерживает readChar
. (Отмечая, конечно, что это явно «мнение».)
Наиболее вероятной причиной принятия окончательного решения Scanner
является безопасность. A final
Класс сканера означает, что экземпляр Scanner
можно безопасно передать из ненадежного кода в доверенный код в изолированной среде.
По крайней мере, для конкретного случая это не так. Если вам действительно нужно читать по одному символу за раз, используйте вместо этого что-то вроде «BufferedReader». –
Вы можете прочитать String со Scanner.read() и разбить строку на символы с помощью методов split: Scanner.read(). ToCharArray(). Возможно, это не то, что вы ищете, но это может дать тот же результат. – TAAPSogeking
Сканер не является родным классом, в смысле Java. – EJP