Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从接口中提取常用方法_Java_Oop - Fatal编程技术网

Java 从接口中提取常用方法

Java 从接口中提取常用方法,java,oop,Java,Oop,我有以下问题。有一个名为userexpactions的接口,其中包含一系列builder风格的方法来验证一些逻辑 看起来像这样: interface UserExpectations { UserExpectations expectSuccessResponseFromApi; UserExpectations expectFailResponseFromApi; UserExpectations expectUserInDB; // more user-s

我有以下问题。有一个名为userexpactions的接口,其中包含一系列
builder风格的方法来验证一些逻辑

看起来像这样:

interface UserExpectations {
    UserExpectations expectSuccessResponseFromApi;
    UserExpectations expectFailResponseFromApi;


    UserExpectations expectUserInDB;
    // more user-specific methods
}
interface OrderExpectations {

    // these are common to UserExpectations
    OrderExpectations expectSuccessResponseFromApi;
    OrderExpectations expectFailResponseFromApi;


    OrderExpectations expectOrderInCart;
    OrderExpectations expectOrderInDB;
    // some more order specific methods
}
每个方法都可以返回
userexpactions
,因此我们可以将它们链接在一起

现在我需要再添加一个expectator类,这里有一些常见的逻辑,即前两个方法

所以看起来是这样的:

interface UserExpectations {
    UserExpectations expectSuccessResponseFromApi;
    UserExpectations expectFailResponseFromApi;


    UserExpectations expectUserInDB;
    // more user-specific methods
}
interface OrderExpectations {

    // these are common to UserExpectations
    OrderExpectations expectSuccessResponseFromApi;
    OrderExpectations expectFailResponseFromApi;


    OrderExpectations expectOrderInCart;
    OrderExpectations expectOrderInDB;
    // some more order specific methods
}
我想将这些常用方法提取到抽象类或另一个顶级接口。这些方法应该在一个地方实施。每个
期望者都应该知道他们的实现。但问题是,每个常用方法都应该返回一个特定的
*expactions
类型,以保持链接方法的能力

找不到一种方法来实现这一点。也许有一个很好的模式可以帮助解决这个我不知道的问题。 有什么想法吗

更新:

所以我想创建一个包含常用方法的抽象表达式:

像这样:

abstract class CommonExpactations<T> {
    T expectSuccessResponseFromApi() {
        // do some logic and then return T
    }
    T expectFailResponseFromApi() {
        // do some logic and return T
    }
}

泛型怎么样

public interface Expecations<T> {
    T expectSuccessResponseFromApi();
    T expectFailResponseFromApi();
    ....

}


public interface UserExcpectations extends Expecations<User> {

}
公共接口体验{
T expectsSuccessResponseFromapi();
T expectFailResponseFromApi();
....
}
公共接口用户期望扩展了经验{
}

尝试创建抽象类的匿名对象

abstract class CommonExpactations<T> {
     T expectSuccessResponseFromApi() {
         // do some logic and then return T
     }
    T expectFailResponseFromApi() {
       // do some logic and return T
    }
}
抽象类公共表达式{
T ExpectsSuccessResponseFromapi(){
//执行一些逻辑,然后返回T
}
T expectFailResponseFromApi(){
//做一些逻辑运算并返回T
}
}
在CommonExpections的子接口中,比如说UserExpections

CommonExpectations ce = new CommonExpectations<UserExpectations>(){

   //provide abstract method implementations
}
CommonExpections ce=新的CommonExpections(){
//提供抽象方法实现
}

通过泛型执行,并具有受保护的抽象T newInstance()
是由子类实现的。您应该为“更新”发布一条消息(还请注意,第二个方法返回类型中有一个输入错误
T UserExpectations expectFailResponseFromApi
)UserExpectations不需要知道任何关于ExpectOrderInAction或expectOrderInDB的信息。但在您的示例中,确实如此,而且我想实现这些常用方法。因此,在这种情况下,UserExcpections和OrderExpections的每个实现都可以访问它们的implementation@user3127896、ExpectOrderInbott和expectOrderInDB是OrderExpectations接口中的方法。这些对于UserExpectations接口来说并不常见。用户期望不知道这些方法。目标是抽象用户期望和订单期望接口中的常用方法,对吗?如果是,根据建议的答案,有一个期望界面,并在UserExcpections和OrderExpections界面中扩展它。你是对的,但问题是我想实现这些常用方法,不仅仅是接口中的声明我建议您使用java8接口,您可以使用这些接口为方法提供默认实现。是的,我知道默认方法,但问题是为了实现这些常用方法,我需要注入其他对象,而我不能在接口中这样做。这就是为什么我在寻找如何使用抽象类来实现它。这有什么意义?实现应该放在一个地方,而不是每个子接口中