gpt4 book ai didi

java - 如何设计 Java 依赖项版本控制

转载 作者:行者123 更新时间:2023-12-01 15:30:23 25 4
gpt4 key购买 nike

我有一个由另一个团队定义的库。它有如下内容:

public class SingletonFoo {
static {
instance = new SingletonFoo();
}

private static final SingletonFoo instance;

private SingletonFoo() {
}

public static SingletonFoo getInstance() {
return instance;
}

public String getStuff() {
// Stuff gets returned
}
}

现在我需要使用我的库中的这个库。但是,使用这两个库的应用程序需要能够独立更新它们。

选项 1:

使用反射来绑定(bind)两者:

public String callLibrary() {
Class fooClass = Class.forName("com.mycorp.SingletonFoo");
Object fooInstance = fooClass.getMethod("getInstance", ...).invoke(null);
String result = (String) fooInstance.getMethod("getStuff", ...).invoke(null);
return result;
// TODO: Add all sorts of error handling
}

但这太难看了。

选项 2:

直接绑定(bind)到他们的库。

public String callLibrary() {
return com.mycorp.SingletonFoo.getInstance().getStuff();
// TODO: catch exception (ClassLoadError or something)
}

显然这要干净得多。然而,其他团队可能会按照与我不同的时间表发布他们的库。如果我将我的库的 V1 绑定(bind)到他们代码的 V1,他们释放 V2,并且应用程序使用我的 V1 和他们的 V2,会发生什么?

假设他们已 promise 保持包、类和所有方法名称不变。如果这些集成点是不变的,那么类加载器会使用完全不同的 jar 实例吗?

最佳答案

java中不存在这样的问题。直到其他团队不更改其接口(interface),即该类仍然称为 SingletonFoo,仍然属于包 com.mycorp 并具有静态方法 getInstance() 您的代码将与它一起使用,无论它是在其他团队的库的当前版本之前或之后构建的。

关于java - 如何设计 Java 依赖项版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com