未顯示我有這些類:Java泛型:編譯器錯誤在eclipse
public class EntityDataModel<T extends AbstractEntity>
{
...
}
public abstract class BarChartBean<E extends ChartEntry, T>
{
protected EntityDataModel<? extends T> currentModel;
...
}
我可以編譯和食沒有問題運行這段代碼,但是當我調用mvn compile
,引發此錯誤:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project edea2: Compilation failure: Compilation failure:
[ERROR] C:\Develop\...\BarChartBean.java:[53,30] error: type argument ? extends T#1 is not within bounds of type-variable T#2
[ERROR] where T#1,T#2 are type-variables:
[ERROR] T#1 extends Object declared in class BarChartBean
[ERROR] T#2 extends AbstractEntity declared in class EntityDataModel
錯誤是不言自明的,理論上說,javac是正確的,eclipse編譯器是錯誤的。
爲什麼會有這樣的差異?
在這裏,你是環境的詳細信息:
的Eclipse
的Maven
- 阿帕奇的Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37 + 02:00)
- Maven的家:C:\開發\工具\ Apache的行家-3.3.3
- Java版本:1.8.0_71,供應商:Oracle公司
- Java主頁:C:\ Program Files文件\的Java \ jdk1.8.0_71 \ jre的
- 默認區域:it_IT,平臺編碼: 的Cp1252
- 操作系統名稱: 「窗口10」 版本: 「10.0」,拱「 AMD64" 技術,家人: 「DOS」
Maven的編譯器插件:
<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <showDeprecation>true</showDeprecation> <showWarnings>true</showWarnings> </configuration> </plugin>
問題:我怎樣才能對準 Eclipse編譯器行爲javac的(但我不想在Eclipse中使用javac)?
謝謝,只知道這是一個ECJ錯誤就足夠了。我打開了一個[bug報告](https://bugs.eclipse.org/bugs/show_bug.cgi?id=496911)。 –
@MicheleMariotti,感謝您的錯誤報告。正如那裏所說,我不相信ecj是錯的。 JLS 4.5通過捕獲類型參數來定義參數化類型的格式。根據定義,這種捕獲符合相應類型變量的上限。那麼,cap#1如何擴展glb(AbstractEntity,T)'違反了綁定'extends AbstractEntity'?這種類型可能是由矛盾界限(即未定義的glb)形成的,但我沒有看到任何這樣的矛盾。那麼,編譯器爲什麼要拒絕呢? –
關於'plexus-compiler-eclipse':我不確定這個插件是如何維護的,以及它將引入哪個版本的ecj。有關在Eclipse之外使用ecj的更多提示,請參閱https://wiki.eclipse.org/ JDT/FAQ#Can_I_use_JDT_outside_Eclipse_to_compile_Java_code.3F其中包含使用tycho的選項,它可以非常有規律地更新ecj-dependency。 –