【发布时间】:2019-03-27 18:33:00
【问题描述】:
我有类层次结构,例如
ChildA extends Parent
ChildB extends Parent
ChildC extends Parent
然后在我的应用程序中,我通过父引用获取任何这个孩子的方法。
问题是所有这些孩子都有相同的方法,但他们的父母没有
所以,ChildA, ChildB, and ChildC 都有 getSomeValue() 吸气剂,但 Parent 没有。
现在我需要解析来自任何这个孩子的值,但 Parent 参考没有为我提供 API,所以我需要将 Parent 转换为特定的孩子类型。
下面是代表我正在尝试做的 sn-p:
private void processChildren(Parent parent) {
ChildA childA = null;
ChildB childB = null;
ChildC childC = null;
if (parent instanceof ChildA) {
childA = parent;
}
if (parent instanceof ChildB) {
childB = parent;
}
if (parent instanceof ChildC) {
childC = parent;
}
String someValue;
if (Objects.nonNull(childA)) {
someValue = childA.getSomeValue();
} // and the same checks and extracts for each of childs and for many methods
}
如您所见,为了仅提取一个值,我需要创建 3 个引用,然后检查它们以强制转换为特定类型,然后检查实际创建的类型以调用该方法。
问题是如何在运行时正确地将引用转换为特定的子引用? 我想可以使用反射来编写,尽管即使使用反射我也无法解决。
此外,即使可能 - 可以这样做吗?
仅供参考:我正在开发一个遗留应用程序,因此我无法更改以前编写的代码,因此我无法在父类中添加此 API。此外,这些类是从外部 jar 提供的。
【问题讨论】:
-
您能否将父类的引用更改为子类扩展的不同子类?像 ChildA --> SubParent --> Parent 这样的东西
-
您可以使用 instanceof 运算符来检查确切的实例类型
-
您能否添加一个代码示例,您如何通过父引用获取此子项的任何方法?
-
getSomeValue()的返回类型是什么? -
这有关系吗?字符串
标签: java dynamic reflection