私はJVMの独自の実装に取り組んでおり、checkcast
命令に戻ってきました。完全なドキュメントはon this pageです。キャストの仕組みのルールを列挙するときにチェックされる条件の1つが、チェック対象のオブジェクト参照がインターフェイスタイプであるかどうかが不思議です。私の理解では、これは可能ではありません。インタフェースを直接インスタンス化することはできず、インタフェースを実装するオブジェクトには、他の具体的なクラス型があります。何か不足していますか?チェックキャストバイトコード命令に混乱がありますか?
答えて
、このブログの記事は、説明があります。http://mbravenboer.blogspot.com/2008/12/why-jvm-spec-defines-checkcast-for.html
これは確かに `不可能」の場合であることが判明しました。 checkcastを再帰的配列のために定義されているため、この項目は、 明細書に理由がある:
- Sが配列型SCを表すクラスである場合は、[]、すなわち、型SCの構成要素の配列、その後:
- ...
- T []は、それは、型TCの構成要素のアレイであるアレイ型TCであれば、次のいずれかが真でなければならない:
- ...
- TCとSCは参照型であり、型SCはbこれらの規則の再帰的適用によってTCにキャストされる。
あなたはList型のオブジェクトを持っているのであれば、[] []、その後、checkcastための規則が再帰的なタイプS = ListとT =コレクションのために呼び出さコレクションにキャストされています。 Listはインタフェースですが、オブジェクトは実行時にList []型を持つことができます。これをJVM Specの保守担当者と確認していないが、私が見る限りでは、これがインターフェイスタイプのルールが存在する唯一の理由です。
Sは、次に、インタフェースタイプの場合:
Tがクラス型である場合、Tは、オブジェクト(§2.4.7)でなければなりません。
Tがインターフェイスタイプの場合、TはSと同じインターフェイスまたはSのスーパーインターフェイス(2.13.2)でなければなりません。
これは明らかです。インタフェースを拡張したインタフェースにキャストすることができます。このケースは、DataInputStreamでシリアル化を呼び出すときなどに使用されます。DataInputStreamインターフェイスはSerializableを実装しているため、オブジェクトの実装クラスがわからなくてもオブジェクトをSerializableにキャストできます。それはあなたがこの定義について混乱だけではありませんでしたようだ
あなたはその質問を理解していないと思います。また、[java.io.DataInputStream](https://docs.oracle.com/javase/8/docs/api/java/io/DataInputStream.html)はクラスであり、インタフェースではありません。 –
- 1. "out"と "in"命令の特権命令はありますか?
- 2. 私の命令は何か問題がありますか?
- 3. iPhoneのカスタムナビゲーションアプリケーションに混乱がありますか?
- 4. JSONオブジェクトのシングルトンの動作に混乱がありますか?
- 5. APNSのプロビジョニングプロファイルに混乱がありますか?
- 6. SPARQL ORフィルタ命令に優先順位はありますか?
- 7. MIPSに即時ロード命令と同じようにストアイミディエイト命令がありません
- 8. XCodeのビルドに失敗するようにプリプロセッサ命令がありますか?
- 9. 機械命令からデコードした後、マイクロ命令を保存する場所はありますか?
- 10. webassemblyのバイナリコード構造に混乱があります
- 11. SSL virtualMINとwordpressウェブサイトの使用に混乱があります
- 12. キャッシングの設計方法に混乱があります
- 13. Cのタイマーに混乱があります
- 14. 数式の実現に混乱があります
- 15. andriod.app.Fragmentとlayout.Fragmentの間に混乱があります
- 16. tensorflowのfeed_dictの仕組みに混乱があります
- 17. ByteCode命令:わかりましたか?
- 18. ARMアセンブリSVC呼び出し - LDRHでSVC命令を取得するのに混乱します
- 19. 命令あたり6502サイクルのタイミング
- 20. オフセットありのMIPS 32 lb命令
- 21. RDTSCPと命令命令
- 22. mipsには32ビットのアドレスと32ビットの命令がありますか?
- 23. 今日、x86にはいくつの命令がありますか?
- 24. SPARC v9にはダブルワード比較およびスワップ命令がありますか?
- 25. nginxは指令の混乱を聴きます
- 26. to_jsonのRubyシンボルに混乱がありました
- 27. onDestroyの後に命令がある場合、命令は実行されますか?
- 28. 定義指令パラメータに関する簡単なコードの混乱
- 29. NSURLConnectionのApple SDKドキュメントに間違いや混乱がありますか?
- 30. Intel x86命令のエンコーディングを見るためのツールがありますか?
ありがとう!それはちょうど私が探していた答えのようなものです。 – templatetypedef
+1ブリリアント。 :) – biziclop