У меня есть иерархия классов, такая как
ChildA extends Parent
ChildB extends Parent
ChildC extends Parent
, тогда в моем приложении я получаю метод любого из этого потомка по ссылке Родителя.
Проблема в том, что все эти дети имеютте же методы, но их родитель не
Итак, ChildA, ChildB, and ChildC
все имеют getSomeValue()
геттер, но Parent
не имеет.
Теперь мне нужно проанализировать значение из любого изэтот дочерний элемент, но ссылка на родительский элемент не предоставляет мне API, поэтому мне нужно привести родительский тип к определенному типу дочерних элементов.
Ниже приведен фрагмент, представляющий то, что я пытаюсь сделать:
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 в родительский класс.Кроме того, классы предоставляются из внешнего банка.