我有以下问题。有一个名为eg UserExpactations
的接口,在builder-style
中有一堆方法来验证某些逻辑。
看起来像这样:
interface UserExpectations {
UserExpectations expectSuccessResponseFromApi;
UserExpectations expectFailResponseFromApi;
UserExpectations expectUserInDB;
// more user-specific methods
}
因为每个方法都可以返回UserExpactations
,所以我们可以将它们链接在一起。
现在我需要添加一个期望类,并且有一些常见的逻辑,即前两种方法。
所以它看起来像这样:
interface OrderExpectations {
// these are common to UserExpectations
OrderExpectations expectSuccessResponseFromApi;
OrderExpectations expectFailResponseFromApi;
OrderExpectations expectOrderInCart;
OrderExpectations expectOrderInDB;
// some more order specific methods
}
我想将这些常用方法提取到抽象类或者另一个顶级接口。这些方法应该在一个地方实施。每个expectators
都应该了解它们的实现。但问题是每个常用方法都应该返回一个特定的*Expactations
类型,以保持链式方法的能力。
找不到如何实现这个的方法。也许有一个很好的模式可以帮助促进我不知道的这个问题。 有什么想法吗?
更新:
所以我想创建一个包含常用方法的抽象Expecations:
像这样:
abstract class CommonExpactations<T> {
T expectSuccessResponseFromApi() {
// do some logic and then return T
}
T expectFailResponseFromApi() {
// do some logic and return T
}
}
并非* Expectations特定接口的每个实现都应该扩展CommonExpactations以便访问常用方法。
但java不允许在抽象类中创建类型为T
的新对象,以便在具体实现中链接其他一些方法。
例如,
UserExpectationsImpl implements UserExpectations extends CommonExpactations<UserExpectations>
答案 0 :(得分:1)
使用仿制药怎么样?
public interface Expecations<T> {
T expectSuccessResponseFromApi();
T expectFailResponseFromApi();
....
}
public interface UserExcpectations extends Expecations<User> {
}
答案 1 :(得分:0)
尝试使用匿名对象创建抽象类。
abstract class CommonExpactations<T> {
T expectSuccessResponseFromApi() {
// do some logic and then return T
}
T expectFailResponseFromApi() {
// do some logic and return T
}
}
在CommonExpectations的子界面中,例如UserExpectations
CommonExpectations ce = new CommonExpectations<UserExpectations>(){
//provide abstract method implementations
}