下面是我的具体示例,但这是一个关于如何处理子类所需的不同签名的更一般的问题。
我有一些页面对象代表网站上的不同网页。它们都是可以通过网站导航的东西,所以我认为它们可以继承一个名为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
}
也许继承不是解决这个问题的最好方法,我能否就这个问题采取一种好的方法?