【发布时间】:2021-01-11 09:03:32
【问题描述】:
假设在假设的 Java 版本 X.1 中,我们在标准库(或具有向后兼容 API 且版本与 Java 版本相关的第三方)中有一个类
public class String {
private final byte[] bytes;
//...
}
在 Java X.2 中它在内部发生了变化
public class String {
private final char[] chars;
//...
}
我们还有一个访问 String 类字段的类,它是服务器插件的一部分
public class Accessor {
public static Field getField() throws ReflectiveOperationException {
return String.class.getDeclaredField(“bytes”);
}
服务器在 Java X.2 上运行,插件使用 Java X.1 编译并在运行时加载
会发生什么? Accessor 将看到哪个 String 类?如果它将是 X.1,那么如果服务器和插件共享一个字符串会发生什么? 如果是 X.2,有没有办法在编译时或包配置中强制使用特定版本,或者至少确定当前可见的 String 类来自哪个 Java 版本?
【问题讨论】:
标签: java maven package javac backwards-compatibility