【问题标题】:What object should my java function return if its return value is one of two possible objects known only at runtime?如果我的 java 函数的返回值是仅在运行时知道的两个可能对象之一,我的 java 函数应该返回什么对象?
【发布时间】:2012-09-11 01:01:10
【问题描述】:

我有一个名为 PageObject 的超类,以及两个继承 PageObject 的名为 AlphaPage 和 BetaPage 的子类。 函数“selectPage()”将返回其中一个页面,但要返回的具体页面只有在运行时才能知道。

那么,函数的返回对象应该是什么,才能避免将子类之一强制转换为函数调用的返回值?

【问题讨论】:

    标签: java object subclass superclass


    【解决方案1】:

    如果调用者想要特定类型,他们将必须进行转换,因为信息仅在执行时才知道。基本上你应该返回PageObject

    当然,如果调用者不需要任何特定于 AlphaPageBetaPage 的东西 - 如果他们可以使用在 PageObject 上声明的方法(可能是抽象的),那么就不需要强制转换。那将是理想的-使用多态性来处理差异。这实际上取决于调用者需要做什么。

    【讨论】:

      【解决方案2】:

      理想情况下,我建议定义一个共同的Interface,由AlphaPageBetaPage 实现,因为两者都有很多共同的行为。

      或者,您可以声明一个抽象类(在您的情况下可能是 PageObject 类),它可以实现您的页面可能具有的任何通用代码。

      所以我的回答是返回类型应该是一个普通的超类型(接口或抽象类)。

      【讨论】:

        【解决方案3】:

        您可以定义一个接口并指定页面应提供哪些功能,然后您的页面类将实现此接口,从而提供所需的功能

        public interface pageable {
        
        pageable selectPage();
            ...
        }
        
        
        
        PageObject implements pageable {
        
            pageable selectPage(){
               ...
            }
        
        ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-07
          • 2020-04-23
          • 2021-08-17
          • 1970-01-01
          • 2015-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多