在我的应用程序中,有一行代码导致了问题:
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编译器并忽略错误?
答案 0 :(得分:3)
这是一个合法的错误,可以在没有任何复杂泛型的情况下进行复制:
public class Foo<T extends Bar.Baz> {}
class Bar {
class Baz {}
}
似乎IntelliJ解析器(不是其编译器,javac
或ecj
)误将extends Bar.Baz
误认为是Foo
声明的一部分,不是T
。换句话说,当你这样做时,你正确地得到了同样的错误:
public class Foo extends Bar.Baz {}
这是IDEA Issue #94011。您可以对该问题进行投票,以便给予更多关注。