IDEのバージョンが早期にエラーを識別および/またはスコープ内のオートコンプリートの提案を提供するために、あなたのコードのクラス構造を解決しようとしているように思えます。しかし、再帰的なサブクラスを追跡/停止する条件はないようです。
最新のバージョンに更新してください。それでも問題が解決しない場合は、バグレポートを提出してください。それまでは、IDEで無効にできる設定があるため、循環クラスの依存関係を解決しようとするとフリーズしません。オートコンプリートの設定を変更すると、訂正や提案の正確性が失われるか完全に無効になることがありますが、コードを実行/コンパイルしてエラー(循環的なクラスの依存関係)を特定して修正することができます。
循環的なクラスの依存関係は、複数のクラスがループ内で互いに継承する場合です。我々は二つのクラス、class A
とclass B
を持っている場合は、この擬似コードに示すように、例えば、我々は循環依存関係ループを作成することができます。
class A inherits B;
class B inherits A;
多くのコンパイラやインタプリタはこれを評価すると、彼らは最初の行を参照してロードしようB
。 B
をロードするには、行2の宣言に進みます。次に、A
をロードする必要があることがわかります。ここではスマートなコンパイラまたはインタプリタはテーブルを反転させますが、それは既に試してみてA
の読み込みに失敗したためです。素朴な人が幸せに指示に従います。
load B!
load A!
load B!
load A!
load B!
load A!
賢いコンパイラやインタプリタは、実際には円クラスの依存関係をロードして動作するコードを作成することができます。しかし、これらは非常にまれです。プログラマとしては、この能力を持たない言語で循環クラスの依存関係を持つことが絶対に不可欠です。
これはクラス構成のアイデアが入っている場所です。スーパークラスを継承するのではなく、B
の作業コピーをクラスA
に変数として渡すことができます。
場合によっては、B
がクラスA
になることを可能にする変換機能を提供することもできます。彼らがお互いに継承している場合、彼らの行動が違うにもかかわらず、同じデータを含んでいる可能性が非常に高いです!一部の言語には、この変換を行う機能が組み込まれています。最も単純な例は「タイプキャスト」です。いくつかの言語では、この変換をパラメトリック多型に一般化しています。互換性のある型を最初に変換する必要なく機能する関数を記述することができます。
コードを難解に解析することは、コンパイラやインタープリタのバグを検出するのに最適です。だから、このスニペットを覚えておいてください。
このようなものは、バグではなく、未定義ビヘイビアとみなされます。依存しているコードで未定義の動作を混乱させたくありません。
はまだこれを読んで? http://www.geekinterview.com/question_details/85345 – jwpfox
ScalaFiddleは「エラー:クラスシューを含む不正な循環参照」と言っています。 IntelliJには独自のScalaコンパイラがあると思いますが、おそらくバグでしょうか? –
@ insan-eうん、そうだね。私はアプリケーションを実行する必要はないと考えてかなり危険だと思って、それを入力するだけでIntelliJがフリーズしました –