[英]Javac compilation target 1.7 differs from Eclipse Juno compilation JDK 1.7 when infering Generics
我目前在使用目标1.7和源1.7的Gradle与使用内置1.7 jdk的Eclipse Juno方面存在Gradle的编译问题。
我有5节课:
Info.java- >没有方法的接口(例如)
public interface Info { //... }
RealInfo.java- >扩展Info接口的接口
public interface RealInfo extends Info { //... }
AbstractManager.java- >具有方法“ getInfo() ”的抽象类
public abstract class AbstractManager<I extends Info>
{
public I info;
public I getInfo()
{
return this.info;
}
}
Manager.java- >具有方法“ getInfo() ”的接口
public interface Manager
{
public <I extends Info> I getInfo();
}
DefaultManager.java- >扩展AbstractManager
public class DefaultManager extends AbstractManager<RealInfo> implements Manager
{
//...
}
如果将此代码复制/粘贴到eclipse中,则一切正常。 没有编译错误。 但是,如果我使用Gradle使用目标jdk 1.7构建它,则编译器将不会喜欢它:
DefaultManager.java:16: error: DefaultManager is not abstract and does not override abstract method <I>getInfo() in Manager
public class DefaultManager extends AbstractManager<RealInfo> implements Manager
^
where I is a type-variable:
I extends Info declared in method <I>getInfo()
您对那里可能发生的事情有任何想法吗?
我发现Javac似乎不喜欢什么。
我将AbstractManager类修改为:
public abstract class AbstractManager<I extends Info>
{
public I info;
public <I extends Info> I getInfo()
{
return (I) this.info;
}
}
Gradle现在在使用Javac进行编译时接受此代码。 很奇怪,虽然它不能正确地推断I
到<I extends Info>
。 Eclipse的编译器可以处理两种语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.