私たちは子クラスは親クラスにキャストされましたが、フィールドを抽出する方法はありますか?
public void doSomething(Parent child){
//Not working
helper.getMyField(child,"refId");
//Working
helper.getMyField((Child)child,"refId");
}
があるとし... c.getDeclaredField(field) ...
を活用し、文字列値によってクラスとそのスーパークラスからフィールドを抽出するための加工方法を持って、私は最初の呼び出しは、上記のレベルで検索を開始しますので、それは知っていますこれは正しい場所の上にあります。しかし、私はまた、クラスをキャストするハードコードをChild
(私が本当にこのようにしている場合はinstanceof
を省略しています)にしたくありません。
すべての子クラスが同じフィールド名を持つ場合はどうなりますか?たとえそうでなくても、メソッドgetMyField()
はフィールドが見つかりませんでした例外をキャッチできます。言い換えれば、私はそれを任意の子クラスにキャストしてそのフィールド値を取得できます。事は(明らかに)、ある子クラスを別の子クラスにキャストすることはできません。
入力時に子プロセスが親クラスにキャストされているときに、ハードコードキャストを使用しないようにキャストまたはバックトラックを戻す方法はありますか?
参考になりますあなたが運転
をキャストはgetClass()メソッドは、オブジェクトではなく、親クラスの実際のクラスを返すと、そのため、あなたは、ハードコーディングする必要はありません。 'helper.getField()'のコードですか? – davidxxx
追加のメソッドを親に追加し、各子に上書きします。親の実装はちょうど '{}'である可能性があります。 –