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

标签 java inheritance upcasting

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

public class BetterConfigLoader extends OldConfigLoader {
    ...
}

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

最佳答案

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

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

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

如果是硬编码引用,那你就不走运了。

关于java - 扩展 Java 类并强制现有库使用扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41715187/

相关文章:

java - Android应用程序启动后立即崩溃

java - 自动 JAX-RX 到 RAML

c++ - 尽管需要,但从未调用基类的重载函数

c++ - 如何使用运行时选择基构造函数初始化不可复制的基类

java - 为什么向上转换一个类不会改变重写的方法?

c++ - 为什么 C 样式转换允许您转换为私有(private)基类?

java - PHP - 安装 JavaBridge.war 时出错

java - 在android中录制现有的音频文件

java - Kotlin 使用的 Java 库中的泛型和继承

c++ - 组件系统的逆向转换