当前位置: 首页 > wzjs >正文

建设企业网站的黑帽seo之搜索引擎

建设企业网站的,黑帽seo之搜索引擎,桂林两江四湖景区怎么游览,怎么做点击图片跳转网站文章目录背景Kotlin中使用可变参数对Kotlin可变参数反编译资料背景 一般在项目开发中,我们经常会在关键节点上埋点,而且埋点中会增加一些额外参数,这些参数通常是成对出现且参数个数是不固定的。如下: //定义事件EVENT_ID const…

文章目录

      • 背景
      • Kotlin中使用可变参数
        • 对Kotlin可变参数反编译
      • 资料

背景

一般在项目开发中,我们经常会在关键节点上埋点,而且埋点中会增加一些额外参数,这些参数通常是成对出现参数个数是不固定的。如下:

//定义事件EVENT_ID
const val EVENT_ID = "event_xmkp"//注意:这里传入的是vararg可变参数
fun String.log(vararg args: String) {if (args.size % 2 > 0) {throw RuntimeException("传入的参数必须是偶数")}if (args.isEmpty()) {buryPoint(this)} else {//注意这里:可变参数在作为数组传递时需要使用伸展(spread)操作符(在数组前面加 *)buryPoint(this, *args)}}private fun buryPoint(eventId: String, vararg args: String) {if (args.isNotEmpty()) {Log.e(TAG, "buryPoint: $eventId, args: ${args.toList()}")} else {Log.e(TAG, "buryPoint: $eventId")}
}

调用方式如下:

EVENT_ID.log()
EVENT_ID.log("name", "小马快跑")
EVENT_ID.log("name", "小马快跑", "city", "北京")

示例中可变参数可以是0个、2个、4个,执行结果:

2022-11-22 19:00:54 E/TTT: eventID: event_xmkp
2022-11-22 19:00:54 E/TTT: eventID: event_xmkp, args: [name, 小马快跑]
2022-11-22 19:00:54 E/TTT: eventID: event_xmkp, args: [name, 小马快跑, city, 北京]

可以看到通过定义可变参数,在调用方可以灵活地传入0个多个参数,下面就分析下Kotlin方法中的可变参数。

注意:可变参数在作为数组传递时需要使用伸展操作符(在数组前面加 *),如果去掉 *号,编译器会报如下错:

请添加图片描述

Kotlin中使用可变参数

Java中可变参数规则:

  • 使用…表示可变参数
  • 可变参数只能在参数列表的最后
  • 可变参数在方法体中最终是以数组的形式访问

Kotlin中可变参数规则:

  • 不同于Java,在Kotlin中如果 vararg 可变参数不是列表中的最后一个参数, 可以使用具名参数语法传递其后的参数的值。
  • Java一样,在函数内,可以以数组的形式使用这个可变参数的形参变量,而如果需要传递可变参数,需要在前面加上伸展(spread)操作符(在数组前面加 *),第一节已给出示例。

对Kotlin可变参数反编译

对上一节中的String.log()代码反编译成Java代码:

//kt代码
fun String.log(vararg args: String) {if (args.size % 2 > 0) {throw RuntimeException("传入的参数必须是偶数")}if (args.isEmpty()) {buryPoint(this)} else {//注意这里:可变参数在作为数组传递时需要使用伸展(spread)操作符(在数组前面加 *)buryPoint(this, *args)}}

转换之后:

 // Java代码public final void log(@NotNull String $this$log, @NotNull String... args) {...if (args.length % 2 > 0) {throw (Throwable)(new RuntimeException("传入的参数必须是偶数"));} else {if (args.length == 0) {this.buryPoint($this$log);} else {this.buryPoint($this$log, (String[])Arrays.copyOf(args, args.length));}}}
  • Kotlinvararg args: String参数转换成Java的 @NotNull String... args
  • Kotlinspread伸展操作符*args转换成Java(String[])Arrays.copyOf(args, args.length),可见最终还是通过系统拷贝生成了数组。

资料

【1】https://www.kotlincn.net/docs/reference/functions.html

http://www.dtcms.com/wzjs/480626.html

相关文章:

  • 百度提交网站多久收录携程: 2023年旅行搜索上涨超900%
  • 西宁微信网站建设需要多少钱济南seo整站优化价格
  • 个人网站备案简介怎么写搜索引擎优化技巧
  • wordpress 插件 原理邯郸网站建设优化
  • 遵义建设厅官方网站 元丰怎么开发网站
  • 百度seo网站优化链接平台
  • 如何做好营销推广河南网站优化
  • 中国住房与建设委员会网站今天大事件新闻
  • 影视网站怎么做网站推广软件下载安装免费
  • 免费模板建站网站网络营销课程个人总结
  • 福州网站建设公司学技术的培训学校
  • 建立官方网站如何制作网页教程
  • 网站标题改动网站设计方案
  • 罗湖做网站的公司牡丹江seo
  • 公司网站运营维护单位软文广告100字
  • 赌钱网站怎么做的软件测试培训班多少钱
  • 商标logo设计软件 免费信息流优化师怎么入行
  • 西安网站建设g强强seo博客
  • 潮州网站建设搜索关键词排名提升
  • 长沙企业如何建网站西安做网站公司
  • 南京建设公司网站凡科建站app
  • 数据库检索网站建设有哪些平台可以发布推广信息
  • 做 爱 网站视频教程十八大禁用黄app入口
  • it公司做网站用什么软件百度搜索排名优化哪家好
  • 四川建设门户网站快速排名服务平台
  • 做外贸站推广武汉seo推广优化
  • 朝鲜网站后缀网站推广的公司
  • 篮球运动装备网站模板广州新闻播报
  • 临沂建设规划局网站建站平台哪个好
  • 专业建设网站公司哪家好竞价推广和seo的区别