首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在推断泛型时,Javac编译目标1.7与Eclipse编译JDK1.7不同

在推断泛型时,Javac编译目标1.7与Eclipse编译JDK1.7不同
EN

Stack Overflow用户
提问于 2013-01-14 20:42:41
回答 1查看 340关注 0票数 0

目前,我使用目标1.7和源代码1.7vsEclipseJuno使用内置的1.7JDK编译Gradle。

我有5门课:

没有方法的Info.java ->接口(例如)

代码语言:javascript
复制
public interface Info { //... }

扩展信息接口的RealInfo.java ->接口

代码语言:javascript
复制
public interface RealInfo extends Info { //... }

AbstractManager.java ->抽象类,其方法为"getInfo()

代码语言:javascript
复制
public abstract class AbstractManager<I extends Info>
{
    public I info;
    public I getInfo()
    {
        return this.info;
    }
}

Manager.java ->接口,其方法为"getInfo()

代码语言:javascript
复制
public interface Manager
{
    public <I extends Info> I getInfo();
}

DefaultManager.java ->扩展AbstractManager

代码语言:javascript
复制
public class DefaultManager extends AbstractManager<RealInfo> implements Manager
{
    //...
}

如果您将此代码复制/粘贴到eclipse中,则一切正常。没有编译错误。但是,如果我使用目标jdk 1.7用Gradle构建它,编译器将不喜欢它:

代码语言:javascript
复制
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()

你知道那里会发生什么事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 12:23:22

我发现了Javac似乎不喜欢的东西。

我将我的AbstractManager类修改为:

代码语言:javascript
复制
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的编译器可以处理这两个语法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14326299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档