java.util.Scanner
与 Java API 一样好,我需要为我正在处理的项目更改默认 API 包(例如)中某些类的代码。
理想情况下,我会扩展我感兴趣的类并创建自己的子类,但我想要扩展的类被声明为“final”。你建议我怎么做?如果我自定义这些包的源代码,我会在编译器上遇到麻烦吗?
java.util.Scanner
与 Java API 一样好,我需要为我正在处理的项目更改默认 API 包(例如)中某些类的代码。
理想情况下,我会扩展我感兴趣的类并创建自己的子类,但我想要扩展的类被声明为“final”。你建议我怎么做?如果我自定义这些包的源代码,我会在编译器上遇到麻烦吗?
如果可以,您应该按照另一个答案中的建议进行包装和委托。请参阅适配器模式。
但如果你真的需要,当然有办法做到这一点。
一种直接的方法是简单地修改下载源代码中的代码并在类路径中替换您自己的 jar 版本。
另一种选择是使用面向方面的编程技术,可能使用AspectJ来根据需要拦截和修改调用。
也可以使用反射和本地类加载器来破解一个解决方案,但是编写代码会很痛苦。
但是,如果您不知道自己在做什么,那么所有这些都是非常危险的。经常有充分的理由将课程定为最终课程。
如果您更具体地告诉我们您希望更改的内容,我们可能会提供帮助,避免您目前认为需要的内容。
你真的不能延长最后一堂课..
如果你真的想通过扩展一个类来添加一个功能,你可以通过修改类 src 来实现。从JDK并将其保存为您自己的类并使用它。
不要那样做。编写您自己的代码,包裹在原始扫描仪周围并使用它。要更新内部包,endorsed
您可以在运行时提供一个目录属性。
永远不要这样做!永远不要更改核心课程。如果类是最终的 - 使用组合而不是继承。