未显示我有这些类: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。 –