私は、多くの不変クラスを含むプロジェクトに取り組んでいます。これらのクラスを封印してマークすることに興味がありますが、後でクラスの「アンシール」を決めると、APIの顧客にランタイムエラーまたはコンパイルエラーが発生する可能性があります。この懸念に何かメリットはありますか、クラスを開封してランタイム/コンパイル時間の問題を起こさないでしょうか?クラスを開封すると、実行時またはコンパイル時にブレークが発生しますか?
1
A
答えて
4
クラスを開封しても、コンパイル時にエラーは発生しません。クラスを開封すると、以前はコンパイル不可能なコードをコンパイルできるようになりますが、その逆はできません。
ランタイムの問題が数多く発生する可能性がありますが、コンシューマーがタイプメタデータを検査する必要があるため、非常に稀ですと思います。たとえば、タイプが開封された場合にユーザーがスローすることは可能ですが、それが大きな懸念事項であるかどうかはわかりません。
0
更新されたバージョンのフレームワークでクラスからsealed属性を削除するだけで、クラスから派生させることができますが、以前はそうできませんでした。あなたの更新版では、クライアントがクラスから派生する必要がない限り、私は何の問題も考えられません。
クラスの開封のもう1つの効果は、ランタイムがいくつかの仮想関数呼び出しを最適化できないことですが、それでも問題は起こりません。
関連する問題
- 1. コード実行時にApple Machエラーが発生しましたか?
- 2. 私のプログラムはコンパイルされましたが、実行時にこのエラーが発生しましたか?
- 3. 開始時にSproutcore発行時にエラーが発生する
- 4. static_cast <T>(...)はコンパイル時または実行時ですか?
- 5. クライアントの実行時にjavax.naming.CommunicationExceptionが発生しました
- 6. テスト実行時にタイムアウトエラーが発生しました。キュウリ/ワットー
- 7. 実行時に例外が発生することを確認しますか?
- 8. gl_PointCoordはコンパイルとリンクを行いますが、実行時にクラッシュします
- 9. コンパイル時にエラーが発生する
- 10. コンパイル時にARCエラーが発生する
- 11. Qt - コンパイル時にエラー2が発生しました
- 12. なぜ実行時エラーが発生しますか:StringIndexOutOfBounds?
- 13. アクティビティ開始時にAndroidクラッシュが発生しましたか?
- 14. Java - 開始時にNullPointerExceptionが発生しました。スイングバグか実装不良?
- 15. 実行時にJavaからGroovyクラスをコンパイルして使用しますか?
- 16. コードの一部をクラスに移動しました。今すぐ実行時エラーが発生する
- 17. 実行時にコードファーストEF4クラスをコンパイルするのに問題があります。
- 18. 実行時にクラスをコンパイルしてアクセスする
- 19. FireBug 1.7.3 - 次のブレークをオフにし、ブレーク時にブレークに変更しますか?
- 20. オペレーターのコンパイル時または実行時のサイズ
- 21. コンパイル時/実行時にマークされた文字列のグローバルリストを生成することは可能ですか?
- 22. Python - コンパイル時と同じように、コードを実行時に実行するEXEを作成します。
- 23. 実行時にPerlに実際の派生クラスがありますか?
- 24. Eclipseは実行時にGroovyスクリプトをJavaクラスにコンパイルしない
- 25. exeを手動で実行すると実行時エラーが発生する
- 26. 「コンパイル時間」と「実行時間」の違いは何ですか?
- 27. 実行時にSCSSをコンパイルしますか?
- 28. 実行時にscssファイルをコンパイルしますか?
- 29. ディレクティブ/命令は、実行時またはアセンブリ時に実行されますか?
- 30. [NoClassDefFoundError]をコンパイルして実行するとエラーが発生する
Jon Skeetが継承のために設計されていないクラスの開封のアイデアについて不平を言っていないと、私は残念です。継承を念頭に置いてこれらのクラスを設計していない場合は、後で開封すると事態が崩れる可能性があります。継承のためにそれらを設計している場合、それらをシールする必要はありません。 – Brian
私はあなたがいたら簡単なテストをするでしょう:) – Grzenio
私はコンパイル時やランタイムのブレークを引き起こさなかった素早く簡単なテストを実行しましたが、反射のようなものは考慮しませんでした。回答)。それは私が心配していることですが、私はそれが壊れるかもしれないと考えていない巧妙なコードです。 私たちがクラスを開封する理由は....うまくいけません。私は、これが起こるべきかどうか、先の結果を知りたいと思います。 – JadeMason