java内部编译器错误,可能的Java编译器错误!程序不能与某些编译器一起编译

首先,一点背景(如果不感兴趣,可以跳过一点).我很生气,很困惑!这应该是一个非常简单的用例,事实上我的代码已经用

Eclipse JDT编译器编译得很好,所以直到现在我一直在配置Maven以确保这样做.

尽管它不能用Oracle JDK和OpenJDK编译,但是我一直在困扰我,因为我认为它可能实际上是我的代码的问题,所以我再次研究它.

我想也许这个bug是在JDT编译器中允许它编译的,而不是Oracle JDK和OpenJDK因为不允许它,我也用它来测试这两个.有问题的原始代码要复杂得多,所以我很难看到问题出在哪里,事实上,我很惊讶地发现在不编译的情况下可以减少这个问题的程度.

Eclipse JDT编译器或Oracle JDK和OpenJDK都有一个非常重要的(imho)错误.

TL; DR

这是相关代码的相当小的表示. (Anything的类型绑定可以被任何接口替换,编译器行为不会改变):

public class Bug & Anything> {

}

interface Property extends PropertyConst {

@Override

public S get();

}

interface PropertyConst {

public C get();

}

interface Anything {

}

总而言之,我认为这应该编译得很好,但Oracle JDK 7& 8和OpenJDK 7不同意.它使用Eclipse Juno为我编译.

当使用这些编译器中的任何一个编译时,上面的代码给出类似于以下错误的东西,但是对于JDT编译器工作得很好:

Bug.java:3: error: types PropertyConst> and Property,?> are incompatible; both define get(), but with unrelated return types

public class Bug & Anything> {

^

1 error

这毫无意义.返回类型显然是相关的,因为引用的两个方法之一必然会覆盖另一个.我非常有信心这应该有效,事实上,最后1%缺失的唯一原因是,基本的使用仿制药已经没有被发现,但我发现没有相关的错误报告它. (不可否认,我并不是很努力,因为http://bugs.sun.com/只是最糟糕的.你甚至可以通过bug报告是否仍然打开来过滤关键字搜索结果吗?呃.)

对我来说最令人困惑的部分是,当你删除X上Anything的类型绑定时,它编译得很好,即使额外的接口与错误无关.

任何人都可以放下心来吗?任何人都知道存在的错误报告,或者以前有过相关经验,可以告诉我问题是什么?如果我没有得到任何确凿的答案,我会提交一些错误报告.

编辑:

有几个人指出我有一个前向参考错误< S extends C,C>.不知道为什么我没有得到这个错误,它甚至在Eclipse中用JDT编译…

无论如何,它仍然无法使用OpenJDK 7或Oracle JDK 7/8为我编译,因此我修改了问题以解决该问题.

编辑2:

快速检查确认这种前向引用现在在Java 7中是合法的.应该如此!

编辑3:

我已经在http://bugs.sun.com/上发布了错误报告.如果/当他们被接受,我会在这里发布链接.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值