我有一个名为 PageObject 的超类,然后是两个名为 AlphaPage 和 BetaPage 的子类,它们继承了 PageObject。函数“selectPage()”将返回这些页面之一,但要返回的特定页面只有在运行时才能知道。
那么,函数的返回对象应该是什么,才能避免将子类之一强制转换为函数调用的返回值呢?
我有一个名为 PageObject 的超类,然后是两个名为 AlphaPage 和 BetaPage 的子类,它们继承了 PageObject。函数“selectPage()”将返回这些页面之一,但要返回的特定页面只有在运行时才能知道。
那么,函数的返回对象应该是什么,才能避免将子类之一强制转换为函数调用的返回值呢?
如果调用者想要特定类型,则必须强制转换,因为该信息仅在执行时才知道。你应该返回PageObject
,基本上。
当然,如果调用者不需要任何特定的AlphaPage
或BetaPage
- 如果他们可以使用声明的方法(可能是抽象的)PageObject
,那么就不需要强制转换。那将是理想的-使用多态性来处理差异。这实际上取决于调用者需要做什么。
理想情况下,我建议定义一个Interface
将由两者实现的共同点AlphaPage
和BetaPage
,因为两者都会有很多共同的行为。
或者,您可以声明一个抽象类(PageObject
在您的情况下可能是类),它可以实现您的页面可能具有的任何公共代码。
所以我的回答是返回类型应该是一个常见的超类型(接口或抽象类)。
您可以定义一个接口并指定页面应提供哪些功能,然后您的页面类将实现此接口,从而提供所需的功能
public interface pageable {
pageable selectPage();
...
}
PageObject implements pageable {
pageable selectPage(){
...
}
...