問題タブ [erasure]

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.

0 投票する
1 に答える
464 参照

java - 同じ消去を行う 2 つのメソッドはオーバーライドと等価である必要はありません (または、それらの署名はそれらの間のサブ署名ではありません)?

jdk6 に関する素晴らしい本「Java scjp 認定のプログラマー ガイド」を読んでいて、ジェネリック オーバーライドに関するセクションがあります。その上で、サブシグネチャと同等のオーバーライドについて説明し、引用した同等のオーバーライドの例をいくつか説明します。

クラスに次の 3 つのジェネリック メソッド宣言があるとします。

static <T> void merge (MyStack<T> s1, MyStack<T> s2) { /*...*/ }

static <T> void merge (MyStack<T> s1, MyStack<? extends T> s2) { /*...*/ }

static <T> void merge (MyStack<T> s1, MyStack<? super T> s2) { /*...*/ }

消去後、3 つのメソッドすべてのシグネチャは次のようになります。merge(MyStack, MyStack) つまり、メソッドのシグネチャはオーバーライドと同等であるため、これらのメソッドはオーバーロードされません。

これらのメソッドがオーバーライドと同等であることに完全に同意するわけではありません。実際、メソッドには「消去による名前の衝突」があると思いますが、他のメソッドのサブシグネチャではありません…おそらく間違っているので、これについて少し説明したいと思います。

サブ署名の定義は、それらの間のサブ署名ではないと私に思わせます。

JSL 6 #8.4.2 メソッド署名 ( http://docs.oracle.com/javase/specs/jls/se6/html/classes.html#8.4.2 )

名前と引数の型が同じである場合、2 つのメソッドは同じシグネチャを持ちます。次の条件がすべて満たされる場合、2 つのメソッドまたはコンストラクタ宣言 M と N は同じ引数の型を持ちます。

  • 彼ら。同じ数の仮パラメータを持つ (おそらくゼロ)

  • それらは同じ数の型パラメーターを持っています (おそらくゼロ)

  • <A1,...,An>M の正式な型パラメーターを とし、 N<B1,...,Bn>の正式な型パラメーターとする。

メソッド m1 の署名は、m2 が m1 と同じ署名を持っているか、m1 の署名が m2 の署名の消去と同じである場合、メソッド m2 の署名のサブ署名です。

...

2 つのメソッド シグネチャ m1 と m2 は、m1 が m2 のサブシグネチャであるか、m2 が m1 のサブシグネチャである場合、オーバーライド等価です。

JSL 8 # 8.4.2。メソッド署名 ( http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.2 )

2 つのメソッドまたはコンストラクター M と N は、同じ名前、同じ型パラメーター (存在する場合) (§8.4.4) を持ち、N の仮パラメーター型を型パラメーターに適合させた後、同じシグネチャを持ちます。 M の、同じ仮パラメーター型。

次のいずれかの場合、メソッド m1 の署名は、メソッド m2 の署名のサブ署名です。

  • m2 が m1 と同じ署名を持っている、または

  • m1 の署名は、m2 の署名の消去と同じです。

2 つのメソッド シグネチャ m1 と m2 は、m1 が m2 のサブシグネチャであるか、m2 が m1 のサブシグネチャである場合、オーバーライド等価です。

編集1

簡単に言えば、私の疑問は、消去に関するサブ署名の定義から、「消去のない1つの署名は、他の署名からの消去と等しい」..「消去後の両方の署名が等しい」ということではない..その微妙ですが重要です(ちなみに、オーバーライドと同等の定義はサブシグネチャの定義に基づいているため、サブシグネチャに関して質問します)

0 投票する
1 に答える
534 参照

json - パターン マッチングでの Scala 消去

JSON 応答の情報を抽出し、ファイルが存在するかどうかを評価する必要があります。次のメソッド定義を使用しています。

このメソッドは、パターン マッチングを介して JSON 応答を検査し、特定の名前のフィールドが存在する場合は true を返す必要があります。JSON 応答の例は次のようになります。

この実装は機能しますが、これを達成するためのより単純で複雑でない実装があると確信しています。また、次のような多くの警告が表示されます。

SchemaManager.scala:38: 型パターン Some[Map[String,Any]] の非変数型引数 Map[String,Any] は、消去によって削除されるため、チェックされていません

誰もがより良い解決策を提供できますか、および/または私が得た警告を説明できますか?

0 投票する
2 に答える
62 参照

scala - scalaでは例外なく間違った型にキャストできる

先日、リストからミキシング動作を除外するコードを書きました。

彼女は、私が遭遇した問題を説明するサンプルコードです。

たぶん私は何か完全に間違ったことをしているのかもしれませんが、それは私の側で多くの問題を引き起こしました.今、私はこの機能によって読みやすくすることを望んでいた多くのコードを作成する必要があります.

0 投票する
3 に答える
1273 参照

scala - Scala での「削除による消去」警告の削除

から Json ファイルを生成する単純な Scala 関数がありますMap[String, Any]

このコードは問題なく動作しますが、コンパイル時に警告メッセージが出力されます。

case value if (value.isInstanceOf[Seq[Int]])が原因で警告が発生し、警告case value @unchecked if (value.isInstanceOf[Seq[Int]])を削除しようとしましたが、機能しません。

警告を削除するには?