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(ローダーは非静的クラスです)。

IntelliJの設定に移動し、コンパイラーをJavacからEclipseに変更すると、ビジネスに戻ります。アプリケーションは正常にコンパイルされ、再度実行されます。

ただし、エラーを示す赤いマークは残ります(そして、それを取り除きたいと思います)。だから私は実際に何か間違ったことをしていてジェネリック引数を修正する必要があるのか​​、それともEclipseコンパイラに依存してエラーを無視しても大丈夫なのか疑問に思っていますか?

4

1 に答える 1

3

これは正当なバグであり、複雑なジェネリックなしで再現できます。

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

class Bar {
    class Baz {}
}

IntelliJパーサー(またはのいずれかであるコンパイラーではないjavacecjが、をではなくextends Bar.Baz、の宣言の一部であると誤解しているようです。言い換えると、これを行ったときに(正しく)発生するのと同じエラーです。FooT

public class Foo extends Bar.Baz {}

これはIDEAIssue#94011です。その問題に賛成票を投じて、より多くの通知を与えることができます。

于 2012-12-10T03:37:22.383 に答える