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