Скажем, у меня есть ситуация выглядит следующим образом:Используйте статический тип только получаемый во время выполнения
Класс X
имеет поле s
типа S
.
S
продлевается на два класса A
и B
и реализующих некоторые те же методы/поля, которые мы все знаем, то должны быть реализованы в S
, но, к сожалению, это не так.
Теперь я хочу сделать что-то вроде этого:
"A or B" downcast_field;
if(s instanceof A)
downcast_field = (A)s;
else if (s instanceof B)
downcast_field = (B)s;
//do something common for the two cases but that need methods implemented both in A and B
Проблемы затем с заранее статическим типом (из-за IFs
), что позволяет мне называть такие методы.
Я предполагаю, что из-за плохого дизайна это на самом деле невозможно, и я должен написать дважды тот же код, что является уродливым, но, возможно, есть решение, которое я сейчас не вижу.
Можете ли вы добавить интерфейс к 'A' и' B'? –
Дизайн очень плохой человек!Вы должны изменить его – Pratik
@pratik Я бы уже сделал это, если это возможно! К сожалению, на данный момент это должно остаться – Demplo