簡體   English   中英

java泛型:eclipse中沒有顯示編譯器錯誤

[英]java generics: compiler error not shown in eclipse

我有這些課程:

public class EntityDataModel<T extends AbstractEntity>
{
    ...
}

public abstract class BarChartBean<E extends ChartEntry, T>
{
    protected EntityDataModel<? extends T> currentModel;

    ...
}

我可以在eclipse上編譯和運行這段代碼而沒有問題,但是當我調用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編譯器是錯誤的。

為什么會有這樣的差異?

在這里,您將了解環境的詳細信息:

  • 日食

    • Mars.2發布(4.5.2)
    • jdk 1.8.0_71
    • 編譯器合規性級別:1.8
    • 錯誤/警告
  • Maven的

    • Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37 + 02:00)
    • Maven home:C:\\ Develop \\ tools \\ apache-maven-3.3.3
    • Java版本:1.8.0_71,供應商:Oracle Corporation
    • Java home:C:\\ Program Files \\ Java \\ jdk1.8.0_71 \\ jre
    • 默認語言環境:it_IT,平台編碼:Cp1252
    • 操作系統名稱:“windows 10”,版本:“10.0”,arch:“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)?

這是Eclipse Java編譯器和官方JDK編譯器之間的另一個不匹配(因為它們確實不同) 並且javac在這個游戲中並不總是正確的角色,你確實可以找到Eclipse編譯器中沒有出現的javac bug。

已經報告了類似的問題: 錯誤456459 :Eclipse編譯器和javac之間的差異 - 枚舉,接口和泛型

要將Maven與Eclipse對齊,可以按如下方式配置 maven-compiler-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <compilerId>eclipse</compilerId>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>2.7</version>
        </dependency>
    </dependencies>
</plugin>

基本上,您告訴Maven使用Eclipse Java編譯器。 我能夠重現您的問題並應用此配置,Maven構建就可以了。 但是,我不推薦這種方法。

另一方面,配置Eclipse以使用JDK編譯器要困難一些,主要是因為Eclipse編譯器是IDE功能的一部分。 Stack Overflow中解釋了一個過程q / a: 如何從Eclipse運行Javac

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM