gpt4 book ai didi

java - 强制动态绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 09:10:45 24 4
gpt4 key购买 nike

问题

我正在重构/移植一个使用具有两个版本的外部 API 的应用程序,我们将它们称为 API 1.0API 2.0。它使用API 2.0,但决定它应该支持API 1.0,而不必编译两个单独的应用程序。

API 2.0(几乎)与 1.0 相同,但具有额外的方法。我将我的 Maven POM 配置为使用 API 1.0 作为依赖项并修复(使用兼容的 API)出现的所有编译错误

但是我面临以下问题:当使用API 2.0编译时,它运行良好:

  • API 2.0
  • API 1.0

但是,当使用API 1.0进行编译时,它仅在API 1.0上运行良好,并在API 2.0上抛出NoSuchMethodException。

我跟踪了该问题并显示在以下代码中:

使用

import test.A;

public class Test {
public static void main(String...args) {
A a = new A();
a.sayHello();
}
}

API 1.0

package test;

public class A {
public A sayHello() {
System.out.println("Hello from API 1.0");
return this;
}
}

API 2.0

package test;

public class A extends B<A> {}

class B<T> {
public T sayHello() {
System.out.println("Hello from API 2.0");
return (T) this;
}
}

编译并运行它们

$ java -version
openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b16)
OpenJDK 64-Bit Server VM (build 25.111-b16, mixed mode)

该方法是存在的,但是似乎需要 A sayHello() 而不是 T sayHello()。尽管T实际上是A。据我了解,这似乎是静态与动态绑定(bind)问题。

问题

有没有办法保留 API 1.0 作为我的依赖项?

它非常适合在运行前发现错误。因此,强制动态绑定(bind)或使用 API 1.0 作为依赖项,但使用 API 2.0 或类似的东西进行编译对我来说很有用。

感谢您的宝贵时间。

最佳答案

您只能选择这两个 API 之一,因为无法区分使用 API 1 或 API 2 方法。

NoSuchMethodException 表示需要某个方法,但找不到它。

您也许能够使用反射来编译和运行可用的 API。

关于java - 强制动态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937530/

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