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/上發布了錯誤報告.如果/當他們被接受,我會在這里發布鏈接.
總結
以上是生活随笔為你收集整理的java内部编译器错误,可能的Java编译器错误!程序不能与某些编译器一起编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 大智慧自定义数据_大智慧自
- 下一篇: java手机编译器_Java编译器手机版