問題タブ [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.

0 投票する
3 に答える
2501 参照

java - Java オブジェクトのインスタンス

指示は次のように述べています: オブジェクト参照を受け取り、指定されたオブジェクトがこのオブジェクトと等しい場合に true を返す equals メソッドを作成します。* ヒント: 'instanceof' と (Position) へのキャストが必要です

私は持っている:

しかし、私はそれを間違っており、自分の問題が何であるかわかりません。私はオブジェクトに慣れていないので、これはちょっと混乱しています..

0 投票する
4 に答える
4348 参照

java - Java:XからYへのチェックされていないキャスト/castOrNullの実装方法

私はこの関数を実装しました:

これにより、コンパイラに警告が表示されます。

正確にはわかりません。私try/catchがここでやっているのはそれをチェックしていませんか?警告を無視できますか?

私の機能は期待どおりに機能しますか?どうすれば正しく実装できますか?

私もチェックを試しましたobj instanceof Yが、Javaがジェネリックを処理する方法のために機能しません。

ところで、この関数は私には非常に便利なようです(他のコードをよりクリーンにするため)。そのような関数はすでにJavaに存在しているのではないでしょうか。


私がそれを使いたい一例:

私のコードでは、このようなケースが頻繁に発生します。そして、これは他の何よりも読みやすく、単純だと思います。しかし、そのコードをさらに単純にする方法について何かあれば、私にもっと良い提案をしてください。

0 投票する
6 に答える
12221 参照

java - java:instanceofとcastを組み合わせましたか?

(私がもっと抽象化Xし、それに別のメソッドを追加する必要があることをアドバイスしないでください。)

C ++では、型の変数xがあり、それが型(のサブクラス)X*でもある場合に特定のことを実行したい場合、次のように記述します。Y*YX

同じことはJavaでは不可能のようです(またはそうですか?)。

代わりに、このJavaコードを読みました。

変数xがなくても、より複雑な式である場合は、この問題のために、Javaでダミー変数が必要になることがあります。

(一般的なことはそれsomething()ですiterator.next()。そして、それを2回だけ呼び出すこともできないことがわかります。本当にダミー変数が必要です。)

ここでは実際にはまったく必要ありません。キャストで一度にチェックをx行うことができないため、必要なだけです。instanceofこれを、非常に一般的なC++コードともう一度比較してください。

castOrNullそのため、ダミー変数を回避できる関数を導入しましたx。私は今これを書くことができます:

の実装castOrNull

さて、このcastOrNull関数をそのように使うのは悪いことだと言われました。何故ですか?(または、より一般的な質問になります。同意し、これも悪だと思いますか?はいの場合、なぜそうですか?または、これは有効な(おそらくまれな)ユースケースだと思いますか?)


言ったように、私はそのようなダウンキャストの使用がまったく良い考えであるかどうかについて議論したくありません。しかし、なぜ私が時々それを使用するのかを簡単に明らかにしましょう:

  1. 時々、非常に特定の事柄に対して別の新しいメソッドを追加するか(1つの特定の場合に1つのサブクラスにのみ適用される)、そのようなinstanceofチェックを使用するかを選択する必要がある場合があります。基本的に、関数を追加するか、チェックdoSomethingVeryVerySpecificIfIAmY()を行うかを選択できます。instanceofそしてそのような場合、後者の方がきれいだと思います。

  2. 時々私はいくつかのインターフェース/基本クラスのコレクションを持っていて、タイプのすべてのエントリーについてY、何かをしてからそれらをコレクションから削除したいと思っています。(たとえば、ツリー構造があり、空の葉であるすべての子を削除したい場合がありました。)

0 投票する
3 に答える
604 参照

java - JAVA でクラスを動的にロードする - Anomaly

皆さん、私は Java の動的クラスのロードに関して少し異なる問題を抱えています。A1の詳細がB1内に保存されるように、オブジェクト(クラスAのオブジェクトA1としましょう)をクラスBの別のオブジェクトB1のコンストラクターに渡す必要があります。B1 は、受信しているオブジェクトの種類を認識していません。したがって、A1 がオブジェクトであることがわかっているだけです。

クラス B には、オブジェクト C1 を受け取り、それがオブジェクト A1 と等しいかどうかをチェックする関数があります。だから基本的に私はチェックする必要があります

  1. オブジェクト C1 も型クラス A の場合 (実際、私はこの時点を過ぎていません。)
  2. オブジェクト内の値が同じ場合

私は解決策を試しました:

オブジェクト A1 を B1 内に格納する場合、オブジェクト B1 はオブジェクト A1 のみを取得し、クラス名 A を取得しないため、クラス「A」の名前も格納します。

クラス型を取得して instanceof() 比較を行うために別のコードを試しましたが、成功しません。なにか提案を ?

私もこれを試しましたが、同じエラー

続行する方法についての指針は非常に役立ちます!

解決策は次を使用することです:instanceofの代わりにisInstance

この問題に付随する他の問題もあります。以下のコメントで更新させてください。ここで、B1 内の C1 と A1 の両方で、AGE などの値を比較する必要があります。今、どうすればいいですか?関数または値を試してみると、コンパイラはオブジェクト C1 および A1 のクラス型を認識していないため、コンパイラ エラーが発生します。

また、そもそも A1 の代わりに X1 を保存することもできました。ここで、ADDRESS のような別のプロパティ チェックをチェックする必要があるかもしれません。これにより、問題の次元が大幅に変わります。

0 投票する
2 に答える
408 参照

java - オブジェクトのツリーを操作するときは、instanceof を避けるべきですか?

さまざまな言語構造を表すクラス階層があります。

これらのクラスのオブジェクトは、さまざまな構造チェックを実行する必要がある複雑なツリー階層を形成します。たとえば、ノードが IteratedExpression の場合、その最初の子は IndexingExpression にする必要があります。チェックに含まれるレベルが 1 つだけの場合は、Visitor パターンを使用できますが、以下の例のようにより複雑なケースでは、instanceof を使用しています。

それは instanceof の適切な使用ですか、それとも私の設計に欠陥がありますか? 代替手段は何ですか?

いくつかの代替案が提案されたので、質問の最初の部分を強調したいと思います。

それは instanceof の適切な使用ですか、それとも私の設計に欠陥がありますか?

0 投票する
6 に答える
3330 参照

java - Collections.unmodifiable* で既にラップされているインスタンスを Collections.unmodifiable* に渡すのはどれほど非効率的ですか?

Map インスタンスを返すさまざまなカスタム (ソース コードは利用できません) フレームワークによって少しずつ細かな作業が行われています。残念ながら、これらのフレームワークは、Collections.unmodifiableMap でラップされた Map インスタンスを返す点で一貫性がありません。私のコードで高度な不変性を (より簡単にマルチスレッドで使用できるように) 保証するために、これらのフレームワークによって返されるものに対して Collections.unmodifiableMap を一律に呼び出しました。

設計のこの部分でパフォーマンスの問題が発生する可能性があることに気付きました。また、場合によっては、 Collections.unmodifiableMap を呼び出して、同じ呼び出しでフレームワークによって既にラップされているインスタンスを渡していました。そして、再ラップにより、インスタンス全体で余分なメソッド呼び出しが発生する可能性がありました。

「instanceof Collections.UnmodifiableMap」を使用しても機能しないようです。そして、現在参照している Map インスタンスをラップする必要があるかどうかを検出する方法を見つけることができません (この状況ではオプションではないリフレクションの使用を除く - 遅すぎる)。

質問:

    A) Collections.unmodifiableMap() メソッドは、UnmodifiableMap のインスタンスが渡されたかどうかを確認し、渡された場合は同じ参照を返すだけですか (それにより、メソッドを呼び出す前に確認する必要がなくなります)?
    B) 変更例外の受信を積極的に回避するために、(リフレクションを使用する以外に) Map インスタンスにクエリを実行して、それが可変 (または不変) かどうかを検出する方法はありますか?
    C) A に対する答えが「いいえ」の場合、JVM/HotSpot には、コア インスタンスに到達するために複数のメソッド ホップを介して呼び出すオーバーヘッドを排除する効率がありますか?
0 投票する
2 に答える
54102 参照

java - クラスが java.lang.Enum かどうかの確認

クラスが列挙型かどうかを知りたいのですが、何か足りないと思います:

Enum.class が無効であるというエラーが表示されます。では、クラスが Enum かどうかを確認するにはどうすればよいでしょうか? それを判断することは可能だと確信していますが、私はそれを取得できません。

ありがとう

0 投票する
12 に答える
32944 参照

java - なぜinstanceOfの後にキャストするのですか?

Square以下の例(私のコースパックから)では、インスタンスc1に他のオブジェクトの参照を与えたいと思いますp1が、それらの2つが互換性のあるタイプである場合に限ります。

ここで私が理解していないのは、最初にそれp1が実際にであることを確認してSquareから、それをキャストしているということです。それがSquare、なぜキャストするのですか?

答えは見かけのタイプと実際のタイプの違いにあると思いますが、それでも混乱しています...

編集:
コンパイラはどのように処理しますか:

Edit2:見かけのタイプではなく実際のタイプをチェック
する問題ですか?そして、キャストが見かけのタイプを変更するということですか?instanceof

0 投票する
7 に答える
9766 参照

java - instanceof の代わりにポリモーフィズムをどのように使用しますか? (なぜ?)

以下のコードを例にとると:

ポリモーフィズムよりもポリモーフィズムを好むとはどういう意味instanceofですか?

編集: ポリモーフィズムとは何かを理解しています。私が見逃しているのは、ではなくどのように使用するかですinstanceof

0 投票する
9 に答える
48178 参照

javascript - 正規表現の typeof

JavaScriptオブジェクトが正規表現であるかどうかを検出する方法はありますか?

たとえば、次のようなことをしたいと思います。

これは可能ですか?

ありがとう!

編集:すべての回答をありがとう。私には2つの非常に良い選択肢があるようです:

また

どちらの方法にも主な長所/短所はありますか?

再度、感謝します!