gpt4 book ai didi

Java 编译器传递类型检查行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:45 26 4
gpt4 key购买 nike

考虑以下场景:

假设我在项目的“src”文件夹中有一个 A 类。

class A {

void foo() {
B b = new B();
}

}

B 类在另一个 jar 中定义,它作为依赖包含在 build.gradle 中

class B extends C {


}

现在,C 类定义在另一个 jar 中,它将在运行时而不是编译时提供。 Gradle 能够正确编译 Class A。

但是,当我在 A 类中导入类 c 时,它给出“找不到类”。


import other.C; // this line gives error

class A {

void foo() {
B b = new B();
}

}

如果 C 类没有直接导入,这是 Java 编译器期望的忽略 C 类的行为吗?

此外,如果在类 A 中使用一个函数使用 B 的对象,该对象在类 C 中但未在类 B 中被覆盖,会发生什么情况。

最佳答案

您问题的确切答案取决于 Java 编译器版本以及它是否需要访问 C 才能完成其工作。

总而言之,我认为这样的设置很脆弱,您不应该这样做。如果定义 A 的库需要 B,它有效地利用了 C 在其公共(public) API 中,就像这种情况对于 extends 那么 C 应该对你的库可见。

关于Java 编译器传递类型检查行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58028051/

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