問題タブ [downcast]

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 投票する
6 に答える
1748 参照

java - Java での強制ダウンキャスト

ダウンキャストできないオブジェクトにダウンキャストを強制したいのですが、正しいアプローチは何だろうと思っていました。ユースケースは、チェックされたルールのリストと、失敗したルールのリストを生成するものがあるということです。失敗したルールは、ルールのサブクラスです。ただし、FailedRule のようなダウンキャストは
failedRule = (FailedRule) rule;

ルール オブジェクトが FailedRule のインスタンスではないため、失敗します。

これを回避するために、クローンをインスタンス化します。
FailedRule failedRule = 新しい FailedRule (ルール);

私のFailedRuleクラスは次のようになります

これを行う簡単な方法はありますか?自分自身に答えるには、設計に欠陥があります。コードは次のようにする必要があります。

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

java - オブジェクトタイプを検出し、それに応じてキャストしますか?

私のメソッドは、入力としてオブジェクトを受け取ります。タイプを判別し、それに応じてキャストするにはどうすればよいですか?

したがって、たとえば:binarySearch( Object o );

binarySearchメソッド内で、オブジェクトoのタイプ(またはクラス)を判別する方法が必要です。次に、そのタイプでキャストする必要があります。どのように私はそれをしますか?

より具体的には、オブジェクトoは基本クラスの子であり(EG SalariedEmpはEmployeeの子です)、特に基本クラスが必要です。

編集:私は自分がやりたいことをどのように行うかを考え出しました。これはまったく別の質問になるはずです。fromの.compareToメソッドを使用してComparable、それらのオブジェクトのプライベートデータに基づいて2つのオブジェクトを比較する方法を設定する必要がありました。私がしなければならなかったのは、implementsキーワードを使用してクラスを「Comparable」として実装することだけでした。したがって、binarySearchメソッドで比較されるオブジェクトのタイプに関係なく、それらが同じ(不明な)タイプであり、Comparableが実装されている場合は機能します。これにより、binarySearchメソッドは、あらゆるタイプの同等のクラスで非常に再利用可能になります。

したがって、公平を期すために、元の質問をカバーする回答を受け入れます。

:)

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

c# - C# ダウンキャストの質問

次の場合、有効かつ合法であり、ダウンキャストすることはできますか?

それとも、合成/集約を使用する方が良いですか?

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

c++ - C++ dynamic_cast - ポリモーフィック要件とダウンキャスト

次のコードではobj、ケース 1 の構築中にderivedクラス オブジェクトも構築しますが、そのメンバー関数にはobj. そのため、ソースとして使用してダウンキャストしている間 (つまり、ケース 2)、既にobj構築されています。derivedなぜobjポリモーフィックである必要があるのでしょうか?

上記の説明であなたを混乱させた場合、アップキャスト時に がポリモーフィックである必要がないのにobj、ダウンキャスト中はを使用している間はポリモーフィックである必要があるのはなぜですか?dynamic_cast

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

c++ - C++ でクラス階層を使用している間はダウンキャストを避けるべきですか?

プロジェクトで動作し、プロジェクトのタイプに応じてさまざまな機能を公開するアプリケーションを書いているとしましょう。さまざまな種類のプロジェクトのクラスの階層があります。

ここで、AbstractProject *_currentProject ポインターをアプリケーションのメイン クラスのメンバーとして持つことを計画していました。起動時にダイアログ ボックスをポップアップし、選択に基づいて、次のようにします。

後で、さまざまなプロジェクトに固有の機能を利用するために、ポインターを特定の型にダウンキャストする必要があります。なんだか、これが不安になります。これを行うより良い方法はありますか?

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

c++ - C++ - ツリーノードの子をより高速にダウンキャストしますか?

ノードを表す基本クラス Node を持つ単純な階層ツリー構造があります。ノードは、別の特定のタイプ (サブクラス化) である可能性があります。

そして、私はいくつかのサブクラスを持っていますNode:

教員ノードのすべての子がDepartmentNodeタイプであることを知っているとします。開発者の作業を保存するために、次のようなことをするつもりでした

しかし、それには がかかりO(n)、呼び出しが行われるたびに新しいベクトル オブジェクトが作成されます。

これを行うより良い方法はありますか?

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

java - 新しい変数を宣言せずにJavaでオブジェクトをダウンキャストできますか?

私は次のようなことをしようとしていました

変数を宣言します

しかし、xyz.method()を呼び出すと、クラスOのメソッドでのみ呼び出すことができ、Eのメソッドでは呼び出せないため、次のようにダウンキャストできます。

私の質問は-新しい変数を宣言せずにこれを行うことができますか?何かのようなもの:

これで、xyz.method()を使用してEのメソッドを呼び出すことができます

Javaでこれを行う方法はありますか?

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

java - ダウンキャストされたオブジェクトはどこを指しますか?

私の質問:

なぜh.nまだ7を印刷するのh = (Horse) ahですか?割り当て後、それはポイントするのと同じオブジェクトをah指す必要があり、nフィールドは5を指しますか?

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

c# - 表現力を失うことなくジェネリックからダウンキャスト

私はこの線に沿って何かを持っています:

注:この場合、オーバーライドは受け入れられません

Reflectionを頻繁に使用するため、からにダウンキャストする必要がある場合がありますSomething<T>Something、プロパティが非表示になっているため、データCasesが失われていると思いCasesます。

どうすればこの状況を回避できますか?使ってみましwhere T:objectたが、それも受け入れられません。

編集:これは私が継承を必要とする理由の例です:

ただし、「ケース」は非表示になっているため、常にnullになります。継承がなければ、考えられるすべてのジェネリック引数を使用して、大きなif-then-elseを作成する必要があります。そして、私を信じてください、私は本当にsomeVar is SomethingandReflectionを使用てこのすべてのオブジェクトを構築する必要があります。これは、他の大きな汎用APIに変換される大きな汎用APIであるため、お互いを認識してはならず、変換は可能な限り透過的である必要があります。

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

c# - C#でオブジェクトのリストをダウンキャストする

オブジェクトのリストをダウンキャストして、リスト内の各オブジェクトを派生クラスのオブジェクトにダウンキャストするにはどうすればよいですか?

これがシナリオです。

の基本アイテムを持つ基本クラスと、Listそれを継承する2つのクラスがあります。

アイデアは、アイテムのリストを作成するために必要なコードを複製する必要がないことです。には必要な基本的なものがすべて揃っており、派生アイテムの1つにBaseItemいつでもダウンキャストできます。BaseItem

それらのリストがあると問題が発生します。のListは、すべての派生クラスに含まれている必要がBaseItemあるため、で宣言されています。BaseClassしかし、実行時にアクセスすると、派生クラスにダウンキャストできないようです。