簡體   English   中英

推斷泛型時,Javac編譯目標1.7與Eclipse Juno編譯JDK 1.7不同

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

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