我有一种工作方法,可以通过字符串值从... c.getDeclaredField(field) ...
假设我们有
public void doSomething(Parent child){
//Not working
helper.getMyField(child,"refId");
//Working
helper.getMyField((Child)child,"refId");
}
我知道这是因为第一次通话开始在上面的位置搜索,这位于正确的位置之上。但我也不想硬编码将课程强制为Child
(如果我真的这样做,也省略instanceof
。)
如果所有子类具有相同的字段名称会怎样?即使不是,方法getMyField()
也可以捕获Field Not Found Exception。换句话说,我可以将它转换为任何子类来获取该字段值。事情是(显然),一个孩子班级不能被投入到另一个孩子班级。
如何在将子项转换为输入中的父类时,如何还原转换或回溯以避免使用硬编码转换?
答案 0 :(得分:0)
您可以尝试使用child.getClass()获取实际的子对象类,然后将此对象强制转换为方法中的所需类。 getClass()方法返回对象的实际类而不是父类,因此您不需要硬编码转换操作
public void doSomething(Parent child){
//Working
helper.getField(child.getClass().cast(child),"refId");
}
也许会有所帮助