4

在我的应用程序中,这行代码引起了麻烦:

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

使用 Eclipse 一切正常。但是在切换到 IntelliJ IDEA 之后会弹出错误:

范围内没有“com.app.Listing”类型的封闭实例。

此错误消息指的是部分Listing<R, L>.Loader(Loader 是一个非静态类)。

当我转到 IntelliJ 的首选项并将编译器从 Javac 更改为 Eclipse 时,我又回到了正题:应用程序将成功编译并再次运行。

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

4

1 回答 1

3

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

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

class Bar {
    class Baz {}
}

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

public class Foo extends Bar.Baz {}

这是IDEA 问题 #94011。您可以对该问题进行投票以给予更大的关注。

于 2012-12-10T03:37:22.383 回答