Поскольку у вас
есть [три] MyChilds, и [] вы получаете другого ребенка в соответствии с параметрами
, у вас есть фундаментальная задача: как работает призывательвашего метода знаете, какой тип возвращаемого значения ожидать, и как компилятор может заранее знать, что тип возвращаемого объекта совместим с типом, ожидаемым invoker?Безопасность типов во время компиляции абсолютно зависит от последнего анализа, и без этого все, что вы представляете себе, чтобы избежать приведений, является просто запутывающим.
Конкретная связь между параметрами вашего метода и типом результата неясна, но если это зависитна все, кроме типов параметров, то все готово.В этом случае нельзя избежать броска или эквивалента в каком-либо месте.Тогда ваши лучшие варианты включают
, имеют метод return MyParent
и принимают, что вызывающему нужно будет привести результат, если он зависит от определенного подтипа (но не иначе).
создать разные методы с разными именами для каждого фактического возвращаемого типа.Это избавит от необходимости вызывать вызывающего, но может потребовать предоставления исключения в случае, если данные параметры не соответствуют объекту правильного типа для вызываемого метода.
Конечно, вы также можете изменить метод так, чтобы тип возвращаемого значения был в зависимости от типов параметров.Например, вы можете
- включить токен типа среди параметров метода.Однако для того, чтобы это служило отличным от приведения эквивалента, метод должен каким-то образом связать токен типа с другими параметрами или использовать его для подлинного выбора типа возвращаемого значения или принудительного возврата возвращаемого значения к указанному типу.