問題タブ [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.
scala - Scala消去タイプの一致と異なるメソッドでの使用
私はこれを達成するために探し回っていますが、マニフェストとリフレクト API を使用しても、達成するのはまだ困難です。
Manifest と Reflection を使用すると、List[Any] をクラス (List[A]) に一致させることができ ます。http://daily-scala.blogspot.co.uk/のように、タイプ T で一致させることもできます。 2010/01/overcoming-type-erasure-in-matching-1.html
TypeTag を保存し、後でそれを使用して型を Any に再アタッチする方法 (Scala 2.10)
しかし、入力のタイプを確認してメソッドで使用するにはどうすればよいですか?
言う、
どうもありがとう
ハーベイ
PS : サラが指摘したように、型マニフェストを保持する唯一の方法は、それらをより複雑な構造に入れる前に、最初にリストを作成することです。
ここに課題があります: List[Any] をキャストして、List[String] などの何かにキャストしたり、コンパイラを怒らせることなく def dummyMethod(stringList: List[String]) のようなメソッドへの入力として一致させることは可能ですか?
scala - Scala消去クラス型パラメータ
私は次の設定をしています:
タイプチェックを機能させることができないようです。Test[A] に暗黙の TypeTag を追加しようとしましたが、プロセス内からアクセスできませんでした。プロセス関数内で Test の型パラメーターと照合することは可能ですか?
scala - ジェネリック ケース クラスによる消去について
次のケース クラスの場合:
なぜ Scala は、私がそうしていると思うように、私にマッチさせてくれるのFoo[Int]でしょうか? Int消されてない?
しかし、別のパターンマッチケースを含めるとコンパイル時エラーが表示されますか?
java - Java の消去 -> コンパイル時のタイプのアライメント - または Java ライブラリ/フレームワーク コードがアプリケーション ロジックに移行
複雑な分散 OSGi システムの構成シナリオに取り組んでいます。
Java 7 でライブラリ コードからアプリケーション コードに次のように移行する必要があります (以下のコードは正しくありません)。
問題の にアクセスできますclazz。コンパイラに「私の心を読む」ようにするためのトリックはありますか(上記でやろうとしていること)、またはリフレクション/メソッドハンドルのトリックを行う必要がありますか?
続行するためにMethodHandle、 の代わりに をライブラリ コードに格納することにしました。Class<?>それでも解決策に興味があります。
java - Java型消去:キャスト挿入のルール?
型消去に関するJavaチュートリアルでは、コンパイラによるキャスト挿入の特定のルールについて詳しく説明していないようです。誰かがチュートリアルで詳述されている変換を引き起こす特定のルールを説明してもらえますか (以下に再現):
(MyNode)具体的には、どのルールがandの挿入を引き起こすのか疑問に思っています(String)。キャストはいつ挿入され、キャストのタイプはどのように選択されますか?
scala - Scala - 抽象型と暗黙的なパラメーター解決
Scala 2.10.4 を使用しています。
類推をむき出しにしてください - 実際のコードは複雑なプログラムに深く埋め込まれているので、それを説明するのではなく、時間をかけて動物について話すために問題を抽象化します ;-)
scala には 2 つの特徴があります。たとえば、次のとおりです。
Animal、およびHouseBase。
Animal を変更することはできませんが、Dog、Rabbit、Fish などのクラスを継承しています。面倒なことに、使用するすべてのサブクラスを所有しているわけではないため、すべてのサブクラスを変更することはできません。
私の動物はすべてどこかに住んでいます。彼らの家は HouseBase から継承する必要があります。HouseBase とそのサブクラスを変更できます (必要に応じて、別の抽象化レイヤーを介して)。
したがって、Dog は Animal のサブクラスであり、HouseBase のサブクラスである Kennel に住んでいます。
うさぎは小屋に、魚は水槽に住む。
ここでは 1 対 1 の関係が強制されていないことに注意してください。魚は池にも住むことができ、それも処理できる必要があります。
私が望んでいたのは、抽象型 Animal を介して参照される具体的な動物 (Fish など) が与えられ、具体的な戻り値の型 (Tank など) が与えられた場合、Scala は正しい暗黙のパラメーターを自動的に選択できるということでした。私が下に持っているデザイン。
ただし、2 つの関連する問題があります。
問題 1 - 動物が抽象として参照されている場合、暗黙的なパラメーターは、基になる具象型ではなく抽象型 (動物) を取る関数のみを検索します。Scala は実行時間情報を使用していないように見えるので、解決策は ClassTags を使用することではないでしょうか? 私はこれを実装しようとしましたが、どうしようもなく迷ってしまいました (私は Scala にかなり慣れていません!)。
問題 2 - 私の動物が複数の種類の家に住むことができる場合、同様の問題が発生します。具体的な戻り値の型が指定されていても、コンパイラは Fish の 2 つの暗黙的なオブジェクトがあいまいであると判断します。私はここで何をすべきかについて少し困惑しています!
実行時に型に一致するように手動のボイラープレートを使用してソリューションを考え出すことはできますが、これはあまり拡張可能ではありません。
どんなアイデアもありがたく受け取った!コードの残りの部分は以下のとおりです。
編集 - これらのリンクは、私が疑っていたことを裏付けているようです。そのコンパイル時のポリモーフィズムが使用されているため、実行時の型を知ることができません。
http://like-a-boss.net/2013/03/29/polymorphism-and-typeclasses-in-scala.html
それで、私の質問は、これを考えると、ランタイムディスパッチを使用するように私の例を変更する方法があると思いますか?
動物:
ハウスとインプリシット:
java - Gson TypeToken はどのように機能しますか?
Java では、たとえば C# ジェネリックとは対照的に、コンパイル時の機能であり、型消去によって削除されることを理解しています。では、Gson は実際にどのように機能するのTypeTokenでしょうか。オブジェクトのジェネリック型を取得するにはどうすればよいですか?
java - 配列リストその型を自動的に ArrayList に変更します
結果:
list = [Hello, 2]
リストのタイプ = class java.lang.String
リストのタイプ = class java.lang.Integer
これが私のコードと結果です。私の質問は、Integer 型の ArrayList が String オブジェクトを格納できるのはどうしてですか? 現在、リストの種類は何ですか? そして、これはどのようなメカニズムですか?
java - 型消去の例と私の理解
結果:
list = [Hello, 2]
リストのタイプ[1]=class java.lang.Integer
結果:
list = [Hello, 2]
スレッド "Thread-2" での例外 java.lang.ClassCastException:
java.lang.String は java.lang.Integer にキャストできません
について何かを読んだ後type erasure、私は推測しました:
私が呼び出すとreadList(list)、実際にはタイプとして「誤って」見なされるものをリストに追加しているArrayListため、エラーはありません(これはいわゆる の私の理解ですtype erasure)。しかし、私が呼び出すとprintln("Type of list = "+list.get(0).getClass());、is 型であるrun()ためエラーが発生します(一方、 list[1] は type であるため、そうではありません)。
ある犯罪者が最初は犯罪現場から逃走したようなものですか (なぜなら、彼は普通の人のものであり、普通の人には自由があるからです)、その後、警察が周りにいたすべての人をチェックし始めたとき、彼は深層の犯罪者であるために逮捕されたのですか?list[0]Stringprintln("Type of list = "+list.get(1).getClass());Integer