首页 > 其他分享 >@FunctionalInterface是必须的吗

@FunctionalInterface是必须的吗

时间:2023-07-25 15:46:33浏览次数:34  
标签:execute return rawKey Redis connection FunctionalInterface 必须

我的疑惑来源于源码中的函数式接口没有加@FunctionalInterface也可以支持lambda表达式

例如RedisTemplate的源码:

@Override
    public Boolean expire(K key, final long timeout, final TimeUnit unit) {

        byte[] rawKey = rawKey(key);
        long rawTimeout = TimeoutUtils.toMillis(timeout, unit);

        return execute(connection -> {
            try {
                return connection.pExpire(rawKey, rawTimeout);
            } catch (Exception e) {
                // Driver may not support pExpire or we may be running on Redis 2.4
                return connection.expire(rawKey, TimeoutUtils.toSeconds(timeout, unit));
            }
        }, true);
    }

execute的第一个参数使用了lambda表达式,而第一个参数却没有声明@FunctionalInterface:

    @Nullable
    public <T> T execute(RedisCallback<T> action, boolean exposeConnection) {
        return execute(action, exposeConnection, false);
    }
/**
 * Callback interface for Redis 'low level' code. To be used with {@link RedisTemplate} execution methods, often as
 * anonymous classes within a method implementation. Usually, used for chaining several operations together (
 * {@code get/set/trim etc...}.
 *
 * @author Costin Leau
 */
public interface RedisCallback<T> {

    /**
     * Gets called by {@link RedisTemplate} with an active Redis connection. Does not need to care about activating or
     * closing the connection or handling exceptions.
     *
     * @param connection active Redis connection
     * @return a result object or {@code null} if none
     * @throws DataAccessException
     */
    @Nullable
    T doInRedis(RedisConnection connection) throws DataAccessException;
}

bing搜索了一下:

 

标签:execute,return,rawKey,Redis,connection,FunctionalInterface,必须
From: https://www.cnblogs.com/gzhich2019/p/17580020.html

相关文章

  • Java开发大型互联网-架构师必须掌握的分布式技术
    Java开发大型互联网-架构师必须掌握的分布式技术摘要:在当今互联网行业,随着用户量和业务的不断增长,大型互联网系统的设计和开发已经成为了一项头等重要的任务。作为架构师,要能够应对这样的挑战,就必须掌握一些关键的分布式技术。本文将介绍Java开发大型互联网系统时,架构师必须要掌......
  • 【深入浅出】你必须知道的 InnoDB 锁(二)
    ......
  • 集成测试最全详解,看完必须懂了
    什么是集成测试集成测试(IntegrationTesting),也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它最简单的形式是:把两个已经测试过的单元组合成一个组件,测试......
  • 【深入浅出】你必须知道的 InnoDB 底层设计
    ......
  • 【深入浅出】你必须知道的 InnoDB 锁(一)
    ......
  • 79.如果想将某个类用作基类,为什么该类必须定义而非声明?
    79.如果想将某个类用作基类,为什么该类必须定义而非声明?派生类中包含并且可以使用它从基类继承而来的成员,为了使用这些成员,派生类必须知道他们是什么。所以必须定义而非声明。参考资料来源:阿秀......
  • 吊炸天的 Kafka 图形化工具 Eagle,必须推荐给你
    Kafka是当下非常流行的消息中间件,据官网透露,已有成千上万的公司在使用它。最近实践了一波Kafka,确实很好很强大。今天我们来从三个方面学习下Kafka:Kafaka在Linux下的安装,Kafka的可视化工具,Kafka和SpringBoot结合使用。希望大家看完后能快速入门Kafka,掌握这个流行的消息中间件!Kaf......
  • 前端必须知道的手机调试工具vConsole
    在日常业务中我相信大家多多少少都有移动端的项目,移动端的项目需要真机调试的很多东西看不到调试起来也比较麻烦,今天给大家分享一个我认为比较好用的调试第三方库VConsole,有了这个库咱们就在手机上看控制台了,VConsole有两种引用方式,使用方法也很简单方法一:在public目录下index.ht......
  • 59.有哪些情况必须用到成员列表初始化?作用是什么?
    59.有哪些情况必须用到成员列表初始化?作用是什么?1.必须使用成员初始化的四种情况①当初始化一个引用成员时;structMyClass{constintmya;int&myb;MyClass(inta,int&b):mya(a),myb(b){}~MyClass(){}};②当初始化一个非静态的常量成员时;int......
  • 必须掌握的50个docker命令
    容器操作查看正在运行的容器:dockerps该命令用于列出当前正在运行的容器。查看所有容器(包括停止的容器):dockerps-a使用该命令可以查看所有容器的列表,包括已经停止的容器。启动容器:dockerstart使用该命令可以启动指定ID的容器。停止容器:dockerstop使用该命令可以停止指定ID......