問題タブ [covariant]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 「method xxx overrides nothing」エラーで Scala のジェネリック関数をオーバーライドする
Scala 言語の機能を学習しています。型パラメーターを持つクラスを宣言します。
クラスPair
にはジェネリック関数がありますreplaceFirst
。NastyDoublePair
を拡張する新しいクラスを宣言しますPair[Double]
。そして、ジェネリック関数をオーバーライドしたいと思いますreplaceFirst
。コンパイルエラーコードは次のとおりです。
コンパイルエラーは以下
ただし、関数replaceFirst
を次のように変更すると、
さらに、 を に変更Pair[+T]
しPair[T]
ます。すべてがうまくいきます。
T
型パラメーターを共変型に設定したい場合でも、コンパイル エラーを修正するにはどうすればよいですか。そうでなければ、私の場合の解決策はありません。不変型パラメーターを使用する必要がありますPair[+T]
が、Pair[T]
アイデアを共有していただきありがとうございます。幸運をお祈りしています。
scala - Scala でサブタイプを定義するときに共変をデフォルトとして設定しないのはなぜですか?
これは definetrait Option[T]
が と同じであることを意味しますtrait Option[+T]
。
インスタンスを指すことができるのと同じようval humanOpt: Option[Human]
に、インスタンスを指すことができると考えるのは簡単です。Option[Student]
val humanOpt: Human
Student
多分それは奇妙に思えるかもしれませんが、なぜ私はこれを考えるのですか?
Java 変数のデフォルトは c++ と比較してポリモーフィズムとしてキーワードを使用する必要がありますvirtual
。Java で OO を簡素化するための重要なポイントだと思います。
Scala は Java と比較してより頻繁に使用される多くのユースケースで高次型を使用したりOption
、自分 Try
で a を定義したりします。Cache[T]
その上、それは依然としてリスコフ置換原則に準拠しています。
共変をデフォルトの動作として単純化しない理由を知りたいだけですか?
java - Java の共変パラメータに関する質問
私はこのコードを持っています:
共変の戻り値の型のようなエラーがあることは知っています
またはそれb.metodo3();
は存在しませんが、私の質問はこれについてです:
Eclipse ではエラーは表示されませんが、共変の引数があり、Java では許可されていないと思います。私は何が欠けていますか?(X x5 = c1.metodo1(new Y());
その中で A の metodo1 を呼び出しているのかもしれませんが、もう一方はわかりません)。
ありがとう!