java内部编译器错误,可能的Java编译器错误!程序不能与某些编译器一起编译
首先,一點背景(如果不感興趣,可以跳過一點).我很生氣,很困惑!這應(yīng)該是一個非常簡單的用例,事實上我的代碼已經(jīng)用
Eclipse JDT編譯器編譯得很好,所以直到現(xiàn)在我一直在配置Maven以確保這樣做.
盡管它不能用Oracle JDK和OpenJDK編譯,但是我一直在困擾我,因為我認為它可能實際上是我的代碼的問題,所以我再次研究它.
我想也許這個bug是在JDT編譯器中允許它編譯的,而不是Oracle JDK和OpenJDK因為不允許它,我也用它來測試這兩個.有問題的原始代碼要復(fù)雜得多,所以我很難看到問題出在哪里,事實上,我很驚訝地發(fā)現(xiàn)在不編譯的情況下可以減少這個問題的程度.
Eclipse JDT編譯器或Oracle JDK和OpenJDK都有一個非常重要的(imho)錯誤.
TL; DR
這是相關(guān)代碼的相當(dāng)小的表示. (Anything的類型綁定可以被任何接口替換,編譯器行為不會改變):
public class Bug & Anything> {
}
interface Property extends PropertyConst {
@Override
public S get();
}
interface PropertyConst {
public C get();
}
interface Anything {
}
總而言之,我認為這應(yīng)該編譯得很好,但Oracle JDK 7& 8和OpenJDK 7不同意.它使用Eclipse Juno為我編譯.
當(dāng)使用這些編譯器中的任何一個編譯時,上面的代碼給出類似于以下錯誤的東西,但是對于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
這毫無意義.返回類型顯然是相關(guān)的,因為引用的兩個方法之一必然會覆蓋另一個.我非常有信心這應(yīng)該有效,事實上,最后1%缺失的唯一原因是,基本的使用仿制藥已經(jīng)沒有被發(fā)現(xiàn),但我發(fā)現(xiàn)沒有相關(guān)的錯誤報告它. (不可否認,我并不是很努力,因為http://bugs.sun.com/只是最糟糕的.你甚至可以通過bug報告是否仍然打開來過濾關(guān)鍵字搜索結(jié)果嗎?呃.)
對我來說最令人困惑的部分是,當(dāng)你刪除X上Anything的類型綁定時,它編譯得很好,即使額外的接口與錯誤無關(guān).
任何人都可以放下心來嗎?任何人都知道存在的錯誤報告,或者以前有過相關(guān)經(jīng)驗,可以告訴我問題是什么?如果我沒有得到任何確鑿的答案,我會提交一些錯誤報告.
編輯:
有幾個人指出我有一個前向參考錯誤< S extends C,C>.不知道為什么我沒有得到這個錯誤,它甚至在Eclipse中用JDT編譯…
無論如何,它仍然無法使用OpenJDK 7或Oracle JDK 7/8為我編譯,因此我修改了問題以解決該問題.
編輯2:
快速檢查確認這種前向引用現(xiàn)在在Java 7中是合法的.應(yīng)該如此!
編輯3:
我已經(jīng)在http://bugs.sun.com/上發(fā)布了錯誤報告.如果/當(dāng)他們被接受,我會在這里發(fā)布鏈接.
總結(jié)
以上是生活随笔為你收集整理的java内部编译器错误,可能的Java编译器错误!程序不能与某些编译器一起编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 大智慧自定义数据_大智慧自
- 下一篇: java手机编译器_Java编译器手机版