問題タブ [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.
java - Java での強制ダウンキャスト
ダウンキャストできないオブジェクトにダウンキャストを強制したいのですが、正しいアプローチは何だろうと思っていました。ユースケースは、チェックされたルールのリストと、失敗したルールのリストを生成するものがあるということです。失敗したルールは、ルールのサブクラスです。ただし、FailedRule のようなダウンキャストは
failedRule = (FailedRule) rule;
ルール オブジェクトが FailedRule のインスタンスではないため、失敗します。
これを回避するために、クローンをインスタンス化します。
FailedRule failedRule = 新しい FailedRule (ルール);
私のFailedRuleクラスは次のようになります
これを行う簡単な方法はありますか?自分自身に答えるには、設計に欠陥があります。コードは次のようにする必要があります。
java - オブジェクトタイプを検出し、それに応じてキャストしますか?
私のメソッドは、入力としてオブジェクトを受け取ります。タイプを判別し、それに応じてキャストするにはどうすればよいですか?
したがって、たとえば:binarySearch( Object o );
binarySearchメソッド内で、オブジェクトoのタイプ(またはクラス)を判別する方法が必要です。次に、そのタイプでキャストする必要があります。どのように私はそれをしますか?
より具体的には、オブジェクトoは基本クラスの子であり(EG SalariedEmpはEmployeeの子です)、特に基本クラスが必要です。
編集:私は自分がやりたいことをどのように行うかを考え出しました。これはまったく別の質問になるはずです。fromの.compareToメソッドを使用してComparable
、それらのオブジェクトのプライベートデータに基づいて2つのオブジェクトを比較する方法を設定する必要がありました。私がしなければならなかったのは、implements
キーワードを使用してクラスを「Comparable」として実装することだけでした。したがって、binarySearchメソッドで比較されるオブジェクトのタイプに関係なく、それらが同じ(不明な)タイプであり、Comparableが実装されている場合は機能します。これにより、binarySearchメソッドは、あらゆるタイプの同等のクラスで非常に再利用可能になります。
したがって、公平を期すために、元の質問をカバーする回答を受け入れます。
:)
c# - C# ダウンキャストの質問
次の場合、有効かつ合法であり、ダウンキャストすることはできますか?
それとも、合成/集約を使用する方が良いですか?
c++ - C++ dynamic_cast - ポリモーフィック要件とダウンキャスト
次のコードではobj
、ケース 1 の構築中にderived
クラス オブジェクトも構築しますが、そのメンバー関数にはobj
. そのため、ソースとして使用してダウンキャストしている間 (つまり、ケース 2)、既にobj
構築されています。derived
なぜobj
ポリモーフィックである必要があるのでしょうか?
上記の説明であなたを混乱させた場合、アップキャスト時に がポリモーフィックである必要がないのにobj
、ダウンキャスト中はを使用している間はポリモーフィックである必要があるのはなぜですか?dynamic_cast
c++ - C++ でクラス階層を使用している間はダウンキャストを避けるべきですか?
プロジェクトで動作し、プロジェクトのタイプに応じてさまざまな機能を公開するアプリケーションを書いているとしましょう。さまざまな種類のプロジェクトのクラスの階層があります。
ここで、AbstractProject *_currentProject ポインターをアプリケーションのメイン クラスのメンバーとして持つことを計画していました。起動時にダイアログ ボックスをポップアップし、選択に基づいて、次のようにします。
後で、さまざまなプロジェクトに固有の機能を利用するために、ポインターを特定の型にダウンキャストする必要があります。なんだか、これが不安になります。これを行うより良い方法はありますか?
c++ - C++ - ツリーノードの子をより高速にダウンキャストしますか?
ノードを表す基本クラス Node を持つ単純な階層ツリー構造があります。ノードは、別の特定のタイプ (サブクラス化) である可能性があります。
そして、私はいくつかのサブクラスを持っていますNode
:
教員ノードのすべての子がDepartmentNode
タイプであることを知っているとします。開発者の作業を保存するために、次のようなことをするつもりでした
しかし、それには がかかりO(n)
、呼び出しが行われるたびに新しいベクトル オブジェクトが作成されます。
これを行うより良い方法はありますか?
java - 新しい変数を宣言せずにJavaでオブジェクトをダウンキャストできますか?
私は次のようなことをしようとしていました
変数を宣言します
しかし、xyz.method()を呼び出すと、クラスOのメソッドでのみ呼び出すことができ、Eのメソッドでは呼び出せないため、次のようにダウンキャストできます。
私の質問は-新しい変数を宣言せずにこれを行うことができますか?何かのようなもの:
これで、xyz.method()を使用してEのメソッドを呼び出すことができます
Javaでこれを行う方法はありますか?
java - ダウンキャストされたオブジェクトはどこを指しますか?
私の質問:
なぜh.n
まだ7を印刷するのh = (Horse) ah
ですか?割り当て後、それはポイントするのと同じオブジェクトをah
指す必要があり、nフィールドは5を指しますか?
c# - 表現力を失うことなくジェネリックからダウンキャスト
私はこの線に沿って何かを持っています:
注:この場合、オーバーライドは受け入れられません
Reflectionを頻繁に使用するため、からにダウンキャストする必要がある場合がありますSomething<T>
がSomething
、プロパティが非表示になっているため、データCases
が失われていると思いCases
ます。
どうすればこの状況を回避できますか?使ってみましwhere T:object
たが、それも受け入れられません。
編集:これは私が継承を必要とする理由の例です:
ただし、「ケース」は非表示になっているため、常にnullになります。継承がなければ、考えられるすべてのジェネリック引数を使用して、大きなif-then-elseを作成する必要があります。そして、私を信じてください、私は本当にsomeVar is SomethingandReflectionを使用してこのすべてのオブジェクトを構築する必要があります。これは、他の大きな汎用APIに変換される大きな汎用APIであるため、お互いを認識してはならず、変換は可能な限り透過的である必要があります。
c# - C#でオブジェクトのリストをダウンキャストする
オブジェクトのリストをダウンキャストして、リスト内の各オブジェクトを派生クラスのオブジェクトにダウンキャストするにはどうすればよいですか?
これがシナリオです。
の基本アイテムを持つ基本クラスと、List
それを継承する2つのクラスがあります。
アイデアは、アイテムのリストを作成するために必要なコードを複製する必要がないことです。には必要な基本的なものがすべて揃っており、派生アイテムの1つにBaseItem
いつでもダウンキャストできます。BaseItem
それらのリストがあると問題が発生します。のList
は、すべての派生クラスに含まれている必要がBaseItem
あるため、で宣言されています。BaseClass
しかし、実行時にアクセスすると、派生クラスにダウンキャストできないようです。