Enumeration#ValクラスのScaladocでは、「Value型を実装しているクラスです。このクラスは、列挙の名前付けと整数の識別動作を変更するためにオーバーライドできます。私は困惑しています:どのようにクラスを無効にするのですか? override class Val extends super.Val
のようなものは許可されていません。Scalaの内部クラスを "オーバーライド"する方法はありますか?
答えて
スカラにはまだ仮想クラスがありませんので、override class Val ...
と書くことはできません。new Val
を呼び出すと、新しいインスタンスに適切なクラスが動的に選択されるようにしてください。その代わりに、クラスを囲むクラスのインスタンスへの参照のタイプに基づいてクラスを選択することができます(この場合はEnumeration
)。
仮想クラスをエミュレートする一般的な方法は、class Val extends super.Val
と書いて、そのクラスのインスタンスのファクトリとして機能する保護されたメソッドをオーバーライドすることです。この場合、あなたはまた、メソッドをオーバーライドする必要があります:
protected def Value(i: Int, name: String): Value = new Val(i, name)
Enumeration
にのみ、このファクトリメソッドを使用してVal
のインスタンスを作成します。一般に、このパターンはプログラマー側で規律を必要としますが、コンストラクターをprivateに宣言して、プログラマーがファクトリメソッドを使用するようにすることで保証できます。
説明をありがとう。今私はさらに最終的な方法をオーバーライドする方法についてもっと興味があります... –
うーん...あなたは正しいです。私はこれをチェックさせてください。 – axel22
(他の読者の説明と同じように、実際にはEnumeration.scalaでは最終的にメソッドが記述されています。)ところで、「Scalaにはまだ仮想クラスはありません」と書いてあります。これは将来起こる可能性がありますか? –
- 1. サブクラスから内部クラスをオーバーライド/拡張する方法は?
- 2. 内部クラスを気にしてオーバーライドする方法は?
- 3. Javaのシステムプロパティをオーバーライドする方法はありますか?
- 4. 子クラスのオーバーライドされたメソッドをJAVAの親クラスの内部クラスから呼び出す方法はありますか?
- 5. javaの "equals()"メソッドをオーバーライドする方法はありますか?
- 6. 外部クラスからインラインCSSをオーバーライドする方法は?
- 7. 外部クラスのメソッドで内部クラスが宣言されている場合、内部クラスのインスタンスを初期化する方法はありますか?
- 8. Scalaでは、クラス内の変数に特性を「パススルー」する方法はありますか?
- 9. Javaアプリケーションでライブラリクラスをオーバーライドする方法はありますか?
- 10. ルビの交点をオーバーライドする方法はありますか?
- 11. odoo9でdefault_getをオーバーライドする方法はありますか?
- 12. 他の内部クラスの内部クラスをインスタンス化する方法
- 13. 匿名の内部クラスで定義されたクラスをインスタンス化する方法はありますか?
- 14. magento2で関数をオーバーライドする方法はありますか
- 15. 他の内部クラスを変更した場合、内部クラスをコンパイルする必要はありますか?
- 16. Androidのアダプターは、静的内部クラスまたは非静的内部クラスである必要があります
- 17. WPFでFirstWindowシャットダウンモードをオーバーライドする方法はありますか?
- 18. ConfigurationManager.AppSettingsをオーバーライドする方法はありますか?
- 19. ガード・ステートメントをオーバーライドする方法はありますか?
- 20. 城ウィンザー:コンポーネントIDをオーバーライドする方法はありますか?
- 21. 高速クラスのobjective-cクラスの抽象クラスレベルメソッドをオーバーライドする方法はありますか?
- 22. 内部クラスをユニットテストする必要がありますか?
- 23. scala:親クラスと子クラスの両方でコンストラクタ内の暗黙的な変数をオーバーライドしますか?
- 24. クリックイベントハンドラの内部からクリックイベントをトリガする方法はありますか?
- 25. クラスの__dir__メソッドをオーバーライドする方法は?
- 26. Scala(2.10)タイプのタグまたはシンボルからJavaクラスを取得する方法はありますか?
- 27. コマンドラインからパッケージ内にあるScalaクラスを実行する方法
- 28. ScalaでJavaの内部関数を移植する方法は?
- 29. junitを使って匿名の内部クラスをテストする方法はありますか?
- 30. 内部クラスが外部クラスのスーパークラスを拡張するのはなぜですか?これを行う方法はありますか?
内部クラスを定義することは可能です。 'Class Val(i:Int、name:String)はsuper.Val(i、name)'を継承しますが、インスタンス化されないのでEnumeration#Valをオーバーライドすることはほとんどありませんすべて。 –