Краткое решение - приведение:
MyPage page = (MyPage)pages.get(1);
Обратите внимание, что для этого требуется, чтобы рассматриваемый объект действительно имел тип MyPage
- в противном случае приведение завершится неудачно с ClassCastException
.Если вы не уверены в этом, вы можете сначала проверить тип объекта:
Page elem = pages.get(1);
if (elem instanceof MyPage) {
MyPage page = (MyPage)elem;
...
}
Однако необходимость делать такие откаты часто является признаком того, что дизайн вашего класса может быть улучшен.Если aForeignObject.getAllPages()
всегда возвращает список MyPage
объектов, вы должны соответственно изменить его тип возвращаемого значения.В противном случае, если newFunction
имеет смысл в интерфейсе Page
(даже абстрактном или с пустой реализацией по умолчанию), вам следует рассмотреть возможность его добавления;тогда вы можете позвонить newFunction
напрямую по Page
ссылкам без необходимости снижения.
Обновление: , поэтому у вас есть Page
объекты, которые вы хотите преобразовать в MyPage
объекты ... Техническим решением для этого будет преобразование Конструктор :
class MyPage extends Page {
MyPage(Page other) {
// deep copy internal state
}
...
}
Хотя технически это работает, я все же переосмыслил бы подход к проектированию, который требует таких решений, если это возможно.Если вы используете сторонний код, который вы не можете изменить, это не вариант.