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来模拟实现类。

  • 相关阅读:
    Remove Duplicates from Sorted Array
    Longest Valid Parentheses
    Valid Parentheses
    Java [Leetcode 112]Path Sum
    Java [Leetcode 119]Pascal's Triangle II
    Java [Leetcode 102]Binary Tree Level Order Traversal
    Java [Leetcode 172]Factorial Trailing Zeroes
    奇异值分解(转载)
    Java [Leetcode 118]Pascal's Triangle
    Java [Leetcode 66]Plus One
  • 原文地址:https://www.cnblogs.com/PythonOrg/p/14765772.html
Copyright © 2011-2022 走看看