扩展Java类并强制现有库使用扩展类

时间:2017-01-18 09:07:24

标签: java inheritance upcasting

情况如下:我使用一些使用特定类加载和访问配置参数的库。 config loader类在其中一个库中实现。 我所做的是:扩展配置加载器类,使其符合我的要求,并能够加载不同的配置源:

public class BetterConfigLoader extends OldConfigLoader {
    ...
}

现在我想让现有的库使用兼容的BetterConfigLoader,而不对库进行更改或不需要重新编译它们。 有没有最佳实践方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

这取决于库如何引用配置类。他们有硬编码new OldConfigLoader().configure()吗?

或者他们是否使用某种SPI技术,例如检查是否存在名为META-INF/services/ConfigLoader的资源,只有在不存在的情况下,才会回退到默认配置类?

他们可以检查系统属性,而不是检查这样的资源。 在这些情况下,您可以通过创建匹配的SPI资源或设置系统属性来设置特殊类。

如果是硬编码的参考,那你就不走运了。

答案 1 :(得分:0)

您可以替换它,而不是扩展OldConfigLoader。从OldConfigLoader的源代码开始,根据您的需要进行更改,然后确保您的版本在类路径中高于原始版本。确保您的实现具有相同的类名,并且与原始文件包在同一个包中。