zoukankan      html  css  js  c++  java
  • 接口作为方法的返回值

    1.接口

    RequestType 是泛型,不是具体的类
    T 也是泛型,不是具体类,只是这个泛型必须extends CloudResult

    public interface CloudClient<RequestType, T extends CloudResult> {
    
        CloudResponse<T> describe(RequestType request);
    
    }
    

    2.抽象方法返回接口

    protected abstract CloudClient<RequestType, ResultType> getClient();
    

    3.实际使用子类重写getClient方法1,返回实现类

    
    class RedisProxyClient implements CloudClient<DescribeAvailableResourceRequest, DescribeAvailableResourceResult> {
    
            @Override
            public CloudResponse<DescribeAvailableResourceResult> describe(DescribeAvailableResourceRequest request) {
                return client.describeAvailableResource(request);
            }
        }
    	
    @Override
    protected CloudClient<DescribeAvailableResourceRequest, DescribeAvailableResourceResult> getClient() {
            return new RedisProxyClient();
    }
    

    4.实际使用子类重写getClient方法2,返回lambda表达式代表实现类,但是前提是接口中只有一个方法才行

    @Override
        protected CloudClient<DescribeAvailableResourceRequest, DescribeAvailableResourceResult> getClient() {
            return request -> client.describeAvailableResource(request);
        }
    

    5.使用方式

    CloudResponse<ResultType> response = getClient().describe(convertRequest())
    

    6.使用场景说明

    不同的产品redis,pod去调用不同的接口来进行获取规格,可以抽象一个接口的describe方法
    不同的产品都实现describe方法,内部通过lambda来模拟实现类。

  • 相关阅读:
    NSInvocation 回调使用
    C#控制台源程序分享
    HTML 表单控件的汇总
    学习笔记(2):HTML 常用标签的归纳
    学习笔记(4):C#中的正则简单总结
    学习笔记(5):DIV+CSS 经典盒子模型 积累
    学习笔记(3):sql语句的总结
    毕业一年小结
    头文件方法问题
    百度被黑事件
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14765772.html
Copyright © 2011-2022 走看看