如何使用泛型参数扩展非静态类?

时间:2012-12-08 17:56:03

标签: java generics intellij-idea inner-classes

在我的应用程序中,有一行代码导致了问题:

public class DisplayListing<R extends Listing<R, L>, L extends Listing<R, L>.Loader> extends SherlockListFragment { ... }

使用Eclipse一切都很好。但在切换到IntelliJ IDEA之后会出现错误:

  

没有封闭的类型&#39; com.app.Listing&#39;在范围内。

此错误消息引用部分Listing<R, L>.Loader(Loader是非静态类)。

当我转到IntelliJ的首选项并将编译器从Javac更改为Eclipse时,我重新开始工作:应用程序将成功编译并再次运行。

但是表示错误的红色标记将保留(我想摆脱它)。所以我想知道我是否真的做错了什么,我的泛型参数应该修复,还是可以依赖Eclipse编译器并忽略错误?

1 个答案:

答案 0 :(得分:3)

这是一个合法的错误,可以在没有任何复杂泛型的情况下进行复制:

public class Foo<T extends Bar.Baz> {}

class Bar {
    class Baz {}
}

似乎IntelliJ解析器(不是其编译器,javacecj)误将extends Bar.Baz误认为是Foo声明的一部分,不是T。换句话说,当你这样做时,你正确地得到了同样的错误:

public class Foo extends Bar.Baz {}

这是IDEA Issue #94011。您可以对该问题进行投票,以便给予更多关注。