相关疑难解决方法(0)

类型变量的无关默认值继承错误:为什么?

免责声明:这不是关于这种情况(虽然错误听起来一样):class从类型java.util.Set和java.util.List继承spliterator()的无关默认值

这就是为什么:

考虑两个接口(在包" a"中)

interface I1 {
    default void x() {}
}

interface I2 {
    default void x() {}
}
Run Code Online (Sandbox Code Playgroud)

我绝对清楚为什么我们不能宣布这样的类:

abstract class Bad12 implements I1, I2 {
}
Run Code Online (Sandbox Code Playgroud)

(!)但我无法理解这种限制,参考类型变量:

class A<T extends I1&I2> {
    List<T> makeList() {
        return new ArrayList<>();
    }
}
Run Code Online (Sandbox Code Playgroud)

有错误:class java.lang.Object&a.I1&a.I2 inherits unrelated defaults for x() from types a.I1 and a.I2.

为什么我不能定义这样的类型变量?java在这种情况下,为什么要关心不相关的默认值?什么类型的变量可以"打破"?

更新:只是为了澄清.我可以创建几个类的表单:

class A1 implements I1, I2 {
    public void x() { …
Run Code Online (Sandbox Code Playgroud)

java type-variables java-8

22
推荐指数
1
解决办法
1611
查看次数

Eclipse 使用哪个 Java 编译器?

我已经在文件夹 Java\jdk1.8.0_152 中安装了我自己的 JDK 8。Eclipse 允许我们从 Window/Preferences/Java/Compiler 中指定 Java 编译器。如果我指定编译器版本 1.8(见下文),Eclipse 实际使用哪个编译器,我自己安装的 JDK 位于 Java\jdk1.8.0_152 还是 Eclipse 自己捆绑的 JDK?这两个编译器有什么区别?

在此处输入图片说明

如果我错了,请纠正我。我的第二个问题是,当我们为 Eclipse 指定已安装的 JRE(Window/Preferences/Java/已安装的 JRE)时,我们必须指定我们自己安装的 JRE,因为 Eclipse 不包含任何 JRE。我对吗?

请注意,这个问题不是题外话,因为它不要求推荐或查找书籍、工具、软件库、教程或其他场外资源,而是要求特定编译器设置的含义。它是切换编译器,是将设置委托给 JDK 编译器(以便可以在那里找到含义)还是其他含义?要在两台不同的计算机上生成相同的字节码,您需要知道这一点。

java eclipse

4
推荐指数
1
解决办法
5051
查看次数

标签 统计

java ×2

eclipse ×1

java-8 ×1

type-variables ×1