Javaのinstanceof
演算子を多用しているコードを調べています。これは一般的な質問であるので、私は細部に至る誘惑と戦います。 instanceof
は、C++の動的なキャストと、あなたがそれが必要だと思うなら、おそらくあなたのモデルがオフであることを、私がそれについて読んだアドバイスを思い出させます。これはまだ従来の知恵ですか?それはJavaのinstanceof
に当てはまりますか?instanceofは危険ですか?
答えて
はい、あなたは正しい方向にあります。 instanceof
は確かにその用途を持っていますが、大量の使用は一般にクラスデザインが不十分であることを示しています。
誰がこれを落としたの?それは正に正しい答えです。多くの 'instanceOf'を使用する必要がある場合、私はあなたの情報フローに欠陥があると仮定します。通常、コードの与えられた部分は、渡されているクラスを尋ねる必要はありません。例外はもちろん可能であり、非常に多くあります。 InstanceOfは、ある意味では反射機能であり、常にリフレクションを慎重に使用しなければなりません。 – markus
'instanceof'の使用が設計上の欠陥を示している理由を説明しなければ、この回答は不完全です。 –
私は 'instanceof'の使用が単にオブジェクト指向ではないということを維持するプログラミング言語に関する講座に参加しました。期間。 – Giorgio
Javaの場合、instanceof
キーワードの数を減らすにはジェネリックを使用する必要があります。そのようにして、コンパイル時に知られていない少数しかチェックする必要はありません。つまり、instanceof
はgoto
のようなものではありません。制御フローをあまり混乱させません(注意しないと、多くの余分な変数を導入します)。
私はinstanceof
を定期的に使用していますが、多くの場合はそれをコードのにおいとみなします。トリックは何か良いものを考え出すことです。可能であれば、instanceof
の使用はおそらく間違っています。私は、使用が一般的なケースで良いか悪いかを確認する体系を知らないだろう。キャストの後にinstanceof
はおそらくキーワードそのものよりも痛いです。
実際には、間違ったequalsメソッドを微妙に作成できるので、instanceofはequalsメソッドで使用することがよくありません。 equalsの最適なデフォルトは '(getClass()== o.getClass())'を使うことです。あなたがすべて「等しい」複数のタイプをサポートする必要がある場合にのみ、instanceofを使用してください。 – jtahlborn
@jtahlborn:それは良い点ですが、 'instanceof'を使う多くのequals()メソッドによって洗脳されているに違いありません。答えの最後の部分を削除しました。 –
残念なことに、これはデフォルトの実装であり、単純な例としてよく使用されるか、IDEによって生成されます。 – jtahlborn
- 1. 危険なテキストを評価するのは危険ですか?
- 2. オープンソースサービスは危険ですか?
- 3. ヘルプは、危険な
- 4. 危険なパスエラー
- 5. Ajaxの危険
- 6. アセンブリ言語は危険ですか?
- 7. オープンソースのWebフレームワークは危険ですか?
- 8. DelphiのExit文は危険ですか?
- 9. 私のHTMLフォームは危険ですか?
- 10. strtol、strtodは危険ですか?
- 11. 危険ですか?イベントについて
- 12. 危険なテスト環境
- 13. 危険なphp関数
- 14. マルチスレッドアプリケーションでシングルトンを使用する危険性は何ですか?
- 15. svnで作業する危険は何ですか?
- 16. asym.netでのtinymce、ValidateRequest = false、それは危険ですか?
- 17. メソッドを仮想化する危険性は何ですか?
- 18. セッションにuser_idを格納するのは危険ですか?
- 19. MD5を使用するのは危険ですか?
- 20. Java EEアプリケーションでのSystem.out.printlnの危険
- 21. C++の最も危険な機能は何ですか?
- 22. パイプラインの一般的なパイプラインの危険性は何ですか?
- 23. リモートデバッグの危険性はどれですか?
- 24. MongoDBの$はどのくらい危険ですか?
- 25. Pythonはバイナリファイルを扱うのに危険ですか?
- 26. これらのコードスニペットはなぜ危険ですか? (SQLインジェクション)
- 27. 「@ class_object_instance.save!(:validate => false)」メソッドはどれくらい危険ですか?
- 28. HTML to Javascript to PHP。これは危険ですか?
- 29. Sys :: SigAction :: timeout_callの使用は危険ですか?
- 30. gets()がscanf()よりも危険なのはなぜですか?
個人的なメモ、私はすぐにどの言語機能悪を呼び出すか、それは決して使用すべきではないと言います。はい、でも行こう。代わりに、瞬きのタグがたくさんある古い地質のサイトのような、あなたがそれらを見るときに際立つべき特定のパターンがあり、プログラマーに「この選択を守るために準備しておく方が良い」と言います。これらのケースの1つであるinstanceOfが頻繁に出現しているのですか、あるいは状況によっては非常に自然ですか? – derekv
私はそれを考えると、反射過剰使用はおそらく良くなく、再設計のための考察を示唆していますが、使用を避けることができない状況がいくつかあります。 –
[instanceofは悪い習慣とみなされますか?もしそうなら、どんな状況下でもなお望ましいものですか?](http://stackoverflow.com/questions/2750714/is-instanceof-considered-bad-practice-if-so-under-what-circumstances-is-instan) –