Java与Kotline Funcation函数与参数函数的详解

news2024/12/29 6:23:19

一.介绍

        在现在以IDE为开发工具的时代,各种开发语言都有,kotlin的语法势头比较强,今天我们将介绍在项目中出现比较多的两种函数,一种是参数函数,还有一种就是Function函数

如果你不了匿名函数请阅读以下文档:

Android kotlin高阶函数与Java lambda表达式介绍与实战_蜗牛、Z的博客-CSDN博客

二.参数函数

        正常在Java中,如果想回调另一个方法或者类中的数据,可以通过接口回调,但是在kotlin语法中,有一种新的定义:参数函数,也叫接口参数

格式

方法名:((参数类型1,参数类型2)->返回值类型)

    var add: ((Int, Int) -> Int)? = null

    var printlog: ((String) -> Unit)? = null
解释:

其实这个很简单,和方法参数一样,只是通过()t给括起来了,如果还不了解方法参数可以参考:

Android kotlin高阶函数与Java lambda表达式介绍与实战_蜗牛、Z的博客-CSDN博客

将匿名函数变成一个函数对象,其他按对象定义变量一样使用。方法中也一样定义

方法传参:

   fun setCallback(function: ((Int, Int) -> Int)?) {

        add = function
    }

    fun  setLogCallback(block: ((String) -> Unit)?){
        printlog=block
    }

如何调用?

这是方法,所以调用格式也是参考方法

   public fun operation() {
        val rsult = add!!(3, 4)
        printlog!!("${rsult}")
        Log.log(rsult)
    }

完整类如下:

class MyFunction {

    var add: ((Int, Int) -> Int)? = null

    var printlog: ((String) -> Unit)? = null


    fun setCallback(function: ((Int, Int) -> Int)?) {

        add = function
    }

    fun  setLogCallback(block: ((String) -> Unit)?){
        printlog=block
    }


    public fun operation() {
        val rsult = add!!(3, 4)
        printlog!!("${rsult}")
        Log.log(rsult)
    }

}

三.如何使用

        使用又分为两种,kotlin的自身调用,和Java的混合调用,但是kotlin的调用又有两种方式,且与普通的函数又不同,Java的调用需要Function函数参数。

在Kotllin中的调用

   val function = MyFunction()
    function.setCallback(function = { x, y ->
        x + y
    })


    function.setLogCallback(block = {
        Log.log(it)
    })
        function.setCallback { x, y -> x+y  }

如果你是直接通过方法调用,如果函数定义了什么参数名,你也要使用相同的,我这里声明了function和block两个,所以直接function={}和block={},里面跟上变量

匿名: function.setCallback { }

直接在方法通过{}来扩展。

Java调用:

java的调用要借助与kotlin中的Funtion函数,Function是interface类型

public interface Function1<in P1, out R> : Function<R> {
    /** Invokes the function with the specified argument. */
    public operator fun invoke(p1: P1): R
}

通过源码可以看出,invoke()就是方法,了解过反射的朋友都知道,这种写法很像hook的风格,通过源码分析也能看出,定义了两个Function,kotlin会根据你的变量多少,映射到对应得function类上,目前系统最多支持22个参数,也就是Function22这个类。

 

Java中的new:

 

   public void fun()
    {
        MyFunction function=new MyFunction();
        function.setCallback(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer invoke(Integer integer, Integer integer2) {
                return null;
            }
        });
    }

注意:Java在与kotlin混合开发,无法支持匿名函数写法,无法用过
function.setCallback(){}这种写法IDE会提示出错。

四.Function的总结

        Function是接口类型,目前最多支持22个参数,这个类目前用的最多就是Java与kotlin的混合写,当然你也可以当接口调用。它的功能和我们在kotlin中定义的参数函数是一个道理。所以kotlin在编译成Java文件时,会自动生成对应得function,这样便于Java在混合的调用

五.总结

1、通过以上的分析,我们了解了Function函数的特色以及为什么会有Function函数,最多支持多大参数。以及匿名参数函数的调用与声明。

2、这些在开发过程中属于比较常见的开发技巧,使用率特别高,免去了接口的定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/836382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IT 运营分析 (ITOA)

IT 运营 &#xff08;ITOps&#xff09; 是指向组织实施、管理、交付和支持 IT 服务&#xff0c;ITOps 可帮助组织维护和运行所需的所有技术工具&#xff0c;以保持业务活动以最高质量正常运行&#xff0c;同时降低成本。 一些常见的 ITOps 过程是&#xff1a; 问题整改&…

el-table 去掉边框(修改颜色)

原始&#xff1a; 去掉表格的border属性&#xff0c;每一行下面还会有一条线&#xff0c;并且不能再拖拽表头 为了满足在隐藏表格边框的情况下还能拖动表头&#xff0c;修改相关css即可&#xff0c;如下代码 <style lang"less"> .table {//避免单元格之间出现白…

Clickhouse 优势与部署

一、clickhouse简介 1.1 clickhouse介绍 ClickHouse的背后研发团队是俄罗斯的Yandex公司&#xff0c;2011年在纳斯达克上市&#xff0c;它的核心产品是搜索引擎。我们知道&#xff0c;做搜索引擎的公司营收非常依赖流量和在线广告&#xff0c;所以做搜索引擎的公司一般会并行推…

【LeetCode-简单】剑指 Offer 52. 两个链表的第一个公共节点

题目 输入两个链表&#xff0c;找出它们的第一个公共节点。 如下面的两个链表&#xff1a; 在节点 c1 开始相交。 输入&#xff1a;intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8,4,5], skipA 2, skipB 3 输出&#xff1a;Reference of the node with value 8 输…

想参加华为杯竞赛、高教社杯和数学建模国赛的小伙伴看过来

本文目录 ⭐ 赛事介绍⭐ 辅导比赛 ⭐ 赛事介绍 ⭐ 参赛好处 ⭐ 辅导比赛 ⭐ 写在最后 ⭐ 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛。该竞赛旨在通过实际问题的建模和解决&#xff0c;培养研究生的创新能力和团队合作精神&a…

【ASP.NET MVC】使用动软(四)(12)

一、筛选器类和Cookie实现路由 需解决的问题&#xff1a; 网站登录往往需要用户名密码验证&#xff0c;为避免重复验证&#xff0c;一般采用Cookie 、Session等技术来保持用户的登录状态&#xff1a; Session是在服务端保存的一个数据结构&#xff0c;用来跟踪用户的状态&…

EtherCAT转MODBUS RTU/RS485/232总线协议网关

产品功能 JM-ECT-RTU是一款EtherCAT从站功能的通讯网关。该产品主要功能是将EtherCAT网络和MODBUS-RTU网络连接起来。 JM-ECT-RTU网关连接到EtherCAT总线中作为从站使用&#xff0c;连接到MODBUS-RTU总线中作为主站或从站使用。 本网关产品将基于MODBUS 的设备或串行RS-232/…

10分钟理解React生命周期

前言 学习React&#xff0c;生命周期很重要&#xff0c;我们了解完生命周期的各个组件&#xff0c;对写高性能组件会有很大的帮助。 一、简介 React /riˈkt/ 组件的生命周期指的是组件从创建到销毁过程中所经历的一系列方法调用。这些方法可以让我们在不同的时刻执行特定的…

科班应届生,我选择来黑马提升技能!

不论是因为对未来的迷茫和焦虑&#xff0c;还是对生活的现状不满意&#xff0c;又或者是想完善自己的专业知识&#xff0c;亦或是跨界迎接新的挑战&#xff0c;都可以来黑马…… 学科 | JavaEE 校区 | 武汉 薪资 | 10k&#xff08;应届生&#xff09; 黑马程序员的学弟、学妹…

【方法】Excel表格如何拆分数据?

当需要把多个数据逐个填到Excel单元格的时候&#xff0c;我们可以利用Excel的数据拆分功能&#xff0c;可以节省不少时间。 小编以下面的数据为例&#xff0c;看看如何进行数据拆分。 首先&#xff0c;要选择数字所在的单元格&#xff0c;然后依次点击菜单栏中的“数据”>…

Django实现音乐网站 ⑹

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是在添加编辑过程中对后台歌手功能优化及表模型名称修改、模型继承内容。 目录 表模型名称修改 模型继承 创建抽象基类 其他模型继承 更新表结构 歌手新增、编辑优化 表字段名称修改 隐藏单曲数和专辑数 姓…

Redis 单线程VS多线程

面试题 redis到底是单线程还是多线程&#xff1f;IO多路复用是什么&#xff1f;redis为什么快&#xff1f; Redis单线程 是什么 Redis的版本很多3.x、4.x、6.x&#xff0c;版本不同架构也是不同的&#xff0c;不限定版本问是否单线程也不太严谨。 1、版本3.x &#xff0c;最…

中外人工智能专家共话大语言模型与 AI 创新

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 智源社区活动&#xff0c;中外人工智能专家共话大语言模型与 AI 创新。 对谈书目&#xff1a; 《大模型时代》&#xff0c;龙志勇、黄雯 著&#xf…

.Net6 Web Core API --- Autofac -- AOP

目录 一、AOP 封装 二、类拦截 案例 三、接口拦截器 案例 AOP拦截器 可开启 类拦截器 和 接口拦截器 类拦截器 --- 只有方法标注 virtual 标识才会启动 接口拦截器 --- 所有实现接口的方法都会启动 一、AOP 封装 // 在 Program.cs 配置 builder.AddAOPExt();//自定义 A…

软件测试方案模板

第一章 概述 ​ 软件的错误是不可避免的&#xff0c;所以必须经过严格的测试。通过对本软件的测试&#xff0c;尽可能的发现软件中的错误&#xff0c;借以减少系统内部各模块的逻辑&#xff0c;功能上的缺陷和错误&#xff0c;保证每个单元能正确地实现其预期的功能。检测和排…

docker端口映射详解(随机端口、指定IP端口、随意ip指定端口、指定ip随机端口)

目录 docker端口映射详解 一、端口映射概述&#xff1a; 二、案例实验&#xff1a; 1、-P选项&#xff0c;随机端口 2、使用-p可以指定要映射到的本地端口。 Local_Port:Container_Port&#xff0c;任意地址的指定端口 Local_IP:Local_Port:Container_Port 映射到指定地…

亚马逊买家号付款异常被锁定是什么原因?怎么解决?

如果在亚马逊上&#xff0c;买家号出现付款异常&#xff0c;可能会导致账号被锁定或受限。这通常是为了保护消费者和卖家的利益&#xff0c;以及防范欺诈行为。 1、常见的买家号付款异常情况可能包括&#xff1a; 付款信息不一致&#xff1a;如果买家提供的付款信息与其账号信…

第三章 图论 No.2单源最短路之虚拟源点,状压最短路与最短路次短路条数

文章目录 1137. 选择最佳线路1131. 拯救大兵瑞恩1134. 最短路计数383. 观光 dp是特殊的最短路&#xff0c;是无环图&#xff08;拓扑图&#xff09;上的最短路问题 1137. 选择最佳线路 1137. 选择最佳线路 - AcWing题库 // 反向建图就行 #include <iostream> #include…

再续AM335x经典,米尔TI AM62x核心板上市,赋能新一代HMI

近十年来&#xff0c;AM335x芯片作为TI经典工业MPU产品&#xff0c;在工业处理器市场占据主流地位&#xff0c;其凭借GPMC高速并口、PRU协处理器等个性化硬件资源&#xff0c;在工业控制、能源电力、轨道交通、智慧医疗等领域广受用户欢迎。随着信息技术的快速发展&#xff0c;…

Java实现数据库表中的七种连接【Mysql】

Java实现数据库表中的七种连接【Mysql】 前言版权推荐Java实现数据库表中的七种连接左外连接右外连接其他连接 附录七种连接SQL测试Java测试转换方法类 Cla1类 Cla2类Cla3 最后 前言 2023-8-4 16:51:42 以下内容源自《【Mysql】》 仅供学习交流使用 版权 禁止其他平台发布时…