2017-07-21 5 views
0

私たちは子クラスは親クラスにキャストされましたが、フィールドを抽出する方法はありますか?

public void doSomething(Parent child){ 

//Not working 
helper.getMyField(child,"refId"); 

//Working 
helper.getMyField((Child)child,"refId"); 

} 

があるとし... c.getDeclaredField(field) ...

を活用し、文字列値によってクラスとそのスーパークラスからフィールドを抽出するための加工方法を持って、私は最初の呼び出しは、上記のレベルで検索を開始しますので、それは知っていますこれは正しい場所の上にあります。しかし、私はまた、クラスをキャストするハードコードをChild(私が本当にこのようにしている場合はinstanceofを省略しています)にしたくありません。

すべての子クラスが同じフィールド名を持つ場合はどうなりますか?たとえそうでなくても、メソッドgetMyField()はフィールドが見つかりませんでした例外をキャッチできます。言い換えれば、私はそれを任意の子クラスにキャストしてそのフィールド値を取得できます。事は(明らかに)、ある子クラスを別の子クラスにキャストすることはできません。

入力時に子プロセスが親クラスにキャストされているときに、ハードコードキャストを使用しないようにキャストまたはバックトラックを戻す方法はありますか?

+0

参考になりますあなたが運転

public void doSomething(Parent child){ //Working helper.getField(child.getClass().cast(child),"refId"); } 

をキャストはgetClass()メソッドは、オブジェクトではなく、親クラスの実際のクラスを返すと、そのため、あなたは、ハードコーディングする必要はありません。 'helper.getField()'のコードですか? – davidxxx

+0

追加のメソッドを親に追加し、各子に上書きします。親の実装はちょうど '{}'である可能性があります。 –

答えて

0

child.getClass()を使用して実際のクラスの子オブジェクトを取得し、このオブジェクトをメソッド内の必要なクラスにキャストしようとすることができます。あなたが共有することはでき多分それは

関連する問題