如何扩展java。util。Scanner类添加nextChar()方法?
这个问题纯粹是学术性的(我是从C#背景开始学习Java的)
我想知道如何扩展java.util.Scanner
类来添加Scanner.nextChar()
方法
(请注意,答案可能不是针对Scanner.nextChar()
,而是关于扩展本机类的一般步骤。非常感谢。)
你可以在下面搜索框中键入要查询的问题!
这个问题纯粹是学术性的(我是从C#背景开始学习Java的)
我想知道如何扩展java.util.Scanner
类来添加Scanner.nextChar()
方法
(请注意,答案可能不是针对Scanner.nextChar()
,而是关于扩展本机类的一般步骤。非常感谢。)
# 1 楼答案
要模拟
nextChar
,可以尝试使用带有空分隔符的next
结果
# 2 楼答案
因为
Scanner
是final
,所以不能声明它的子类。句号可以想象,您可以修改这个
Scanner
类来删除final
修饰符。然而,事实上,这个is类位于一个保留的包中,这意味着您需要修改Java安装来实现这一点。(您也可以通过修改bootclasspath来实现这一点……但这相当于一件事。)但是说实话,如果真的没有必要修改
Scanner
。相反,您可以简单地复制Scanner
源代码(例如,来自OpenJDK代码库),并使用它在应用程序的包空间中创建一个“不相关”的类,该类具有额外的方法。它不会按类型与真正的Scanner
类相关,但这不太可能是一个问题记录在案:
这个问题;A-https://stackoverflow.com/a/18746676/139985提供了一些可能的原因,说明
Scanner
不支持readChar
。(当然要注意这显然是“意见”。)使
Scanner
成为最终版本的最可能原因是安全性。final
Scanner类意味着Scanner
实例可以在沙盒环境中安全地从不受信任的代码传递到受信任的代码# 3 楼答案
^{} 是一个} 方法读取单个字符
final
类,不能扩展它。如果这是一门非最终课程,你可以扩展它。正如Dennis所建议的,可以使用^{也许扩展^{} 并模拟
BufferedReader