当不同类型的对象需要不同的方法签名时处理继承

时间:2016-07-14 15:17:24

标签: java spring inheritance

下面是我的具体示例,但这是一个关于如何处理子类所需的不同签名的更一般的问题。

我有一些页面对象代表网站上的不同网页。它们都是可以通过网站导航的东西,所以我认为它们可以继承一个名为navigable的类是有道理的。我正在努力创建它以便您可以添加页面对象(使用弹簧,因此您可以自动装入它),然后调用导航,它将使您进入页面。现在我已经找到了一种方法,但问题出现了一些页面需要一个行参数,所以你必须使用一个签名,如:navigate(String rowDescription)来到页面。

大多数页面上没有行,因此对于他们来说,使用该方法没有意义,有些页面既有行的路径,也有不需要行的路径。我现在所做的工作,但有点打破了一些继承规则。这是我在伪java代码中所拥有的要点:

// where T is the current page, and P is the previous.
public abstract class Navigable<T,P extends Navigable>{

    public abstract T navigate();

    protected P resolvePreviousPage(){
      // spring magic to get previous page object
    }

    public T navigate(String rowDescription){
       throw unimplementedException(); // Something that has a row would have to override this.
    }

    public navigateBack(){
      //Default way of navigating back a page;    
    }
}

然后页面对象将扩展Navigable并以某种形式实现导航:

public thisPageObject navigate(){
  return resolvePreviousPage().navigate()
   .linkToGetToThisPage.click; // Clicking this link returns this page
}

也许继承不是解决这个问题的最好方法,我能否就这个问题采取一种好的方法?

0 个答案:

没有答案