問題タブ [instanceof]
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.
java - instanceof と getClass( )
getClass()
演算子よりもand==
演算子を使用すると、パフォーマンスが向上しinstanceOf
ます。
どちらを使用するか、またはどちらを使用するかのガイドラインはありますgetClass()
かinstanceOf
?
シナリオを考えると、一致する正確なクラス、つまりString
、Integer
(これらは最終クラスです)などを知っています。
instanceOf
オペレーターの悪い習慣を使用していますか?
java - この場合の instanceof アプローチの代替
こんにちは、次のようなものに代わるよりエレガントな代替手段は何だろうかと思っています。
では、代替手段は何ですか...
アドバイスありがとうございます。
編集:基本クラスには2つだけでなく多くのサブクラスがあり、その数は時間とともに増加する可能性があります
java - クラスオブジェクトである引数でinstanceofをチェックする方法は?
ジェネリック クラス ローダーを構築しようとしています。メソッド引数に対してロードするクラスをチェックして、それらが同じクラスであるかどうかを判断する必要があります。
コードは、主に私がやろうとしていることを説明しています。
これはどのように達成されますか?
javascript - もっと奇抜なJavaScriptのシェナニガンが頭に浮かぶ
JavaScriptでのオブジェクト指向プログラミングについてMikeKossを読みました。彼はサブクラス化について簡単に話し、「代替のサブクラス化パラダイム」に触れています。この例の後、Kossは次のように書いています...
instanceof
残念ながら、この手法では、演算子を使用してスーパークラスのメンバーシップをテストすることはできません。ただし、複数のスーパークラス(多重継承)から派生できるという追加の利点があります。
...そしてそれは私に考えさせました。多重継承のアイデアはかっこいいようです!したがって、2つの質問があります。
- 多重継承のアイデアは実用的ですか?それは実際に実践されていますか?長所または短所はありますか?
instanceof
演算子をオーバーライドして、その機能を多重継承に拡張するにはどうすればよいですか?
android - Androidで例外オブジェクトタイプを確認するにはどうすればよいですか?
関数から他のデータと共に返される Android の例外オブジェクト タイプを確認したいと思います。私は以下を使用していましたが、これは発生したくないサブクラス SSLPeerUnverifiedException に対してもトリガーされます。
次に、これを次のように変更しましたが、文字列を比較するよりも比較チェックの方が優れていると思いました。
jsf - JSF EL: instanceof は予約済みですが、まだ実装されていませんか?
JSF EL で instanceof 演算子を見つけましたが、使用すると例外がスローされます。明らかに予約されていますが、実装されていませんか? 私が現在使用しているJSF 1.2よりも新しいバージョンではない場合、(おそらく)いつ利用可能になりますか?
java - switch ステートメントで instanceof 演算子を使用することは可能ですか?
instanceof
オブジェクトに switch case を使用することについて質問があります。
例: 私の問題は Java で再現できます。
を使用してどのように実装されswitch...case
ますか?
java - javax.swing.text から AbstractDocument.UndoRedoDocumentEvent に対して instanceof を試行すると、IllegalAccessError が発生します
のソースでjavax.swing.text.DefaultCaret.Handler.insertUpdate(DocumentEvent)
、次の行を見つけました (1685 行目から):
しかし、私がこれを試すと:
それは与えるでしょう:
なぜ私はinstanceof
そのクラスに反対することはできませんが、DefaultCaret.Handler
できるのですか?
Java バージョン 1.6.0_20 の使用
アップデート:
回答に基づいて、次のことを試しました。
ファイルFoo.java
:
ファイルOuter.java
:
これは正常に機能し、期待どおりに「aww」を出力します。
両方のファイルがパッケージに含まれていることに注意してくださいjavax.swing.text
。また、最初の質問でFoo.java
すでにパッケージに含まれていたことにも注意してください。javax.swing.text
私が知る限り、パッケージは「密封」されていません。rt.jar
(パッケージを含むもの)のマニフェストにjavax.swing.text
「封印」が含まれていませんでした。コマンドPackage.getPackage("javax.swing.text").isSealed()
は false を返します。
したがって、パッケージの他のクラスはできますがinstance of
、自分の内部クラスに対してはできますが、に対してはできません。AbstractDocument.UndoRedoDocumentEvent
これはなぜですか?
design-patterns - instanceof の代替?
instanceof または同等のものを使用するのは悪い設計だと聞いたことがあります ( http://www.javapractices.com/topic/TopicAction.do?Id=31、 instanceof を使用する必要がある場合と使用しない場合は? ) これには同意できますこれは主に、コードの再利用が難しくなる可能性があるためです。
ただし、場合によっては、instanceof に代わる優れた方法を思いつくのが難しいことがわかりました。たとえば、リアルタイム ストラテジー ゲームを作りたいとします。ゲームは障害物、建物、戦車で構成され、すべてグリッド上に配置され、各エンティティはグリッド内の 1 つのユニットを占有します。そこで、クラス Obstacle、Building、および Tank のスーパークラスであるクラス Entity を作成します。グリッドはエンティティのインスタンスで構成されます。各更新中に、各戦車が範囲内の敵戦車を狙って発砲するようにします。したがって、これを行う簡単な方法は、各タンクがグリッドにタンク範囲内のすべてのエンティティを要求し、これらすべてのエンティティを繰り返し処理して、クラス Tank のインスタンスであるかどうかを確認することです。
instanceof を使用する代わりに私の唯一の試みは、デザイン パターンVisitorを使用することでした。(entity->acceptVisitor(visitor))
訪問者は、メソッドの 1 つまたは を呼び出すvisitor->visitObstacle(this)
エンティティvisitor->visitBuildig(this)
によって受け入れられvisitor->visitTank(this)
ます。ただし、これにより、多数のビジターを作成する必要があり、エンティティに対して作成したいタスクごとにほぼ 1 つの新しいビジターを作成する必要がありました。もう 1 つの問題は、エンティティがどのクラスから構築されているかに関係なく、多くの場合、ビジターがエンティティに対して同じメソッドを呼び出すことです。これは、たとえば、エンティティが別のエンティティが静止しているかどうかを確認したい場合に発生する可能性があります。
#Python コード:
もちろん、この場合、訪問者にそうさせる代わりに、エンティティが静止しているかどうかを別のエンティティに直接尋ねるようにすることもできます。しかし、その場合、エンティティのプロパティのチェックに一貫性がありません。エンティティ タイプをチェックする必要があるかどうかに応じて、(直接またはビジターを通じて) いくつかのプロパティについてエンティティに問い合わせる方法を変更できるようにすることは、私の意見では、かなり奇妙な設計のように思えます。
では、上記の問題で instanceof を使用する他の方法はありますか?
java - オブジェクトがパラメータタイプのインスタンスであるかどうかをテストします
オブジェクトがジェネリック型のインスタンスであるかどうかを判断する方法はありますか?
それは明らかに機能しません。代替手段はありますか?Javaリフレクションを使用してクラスをインスタンス化し、それがジェネリック型であることを確認したいのと同じですT
。