[英]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.