目前,我使用目标1.7和源代码1.7vsEclipseJuno使用内置的1.7JDK编译Gradle。
我有5门课:
没有方法的Info.java ->接口(例如)
public interface Info { //... }扩展信息接口的RealInfo.java ->接口
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中,则一切正常。没有编译错误。但是,如果我使用目标jdk 1.7用Gradle构建它,编译器将不喜欢它:
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()你知道那里会发生什么事吗?
发布于 2013-01-15 12:23:22
我发现了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的编译器可以处理这两个语法。
https://stackoverflow.com/questions/14326299
复制相似问题