Kotlin上手(一)

标准函数with

with函数接收两个参数,第一个参数是任意类型的对象,第二个是Lambda表达式。with函数会在Lambda表达式中提供第一个参数的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。

fun test() {
        val list = listOf("Apple", "Banana", "Orange")
        val result = with(StringBuilder()) {
            append("开始吃水果")
            for (fruit in list) {
                append(fruit).append("\n")
            }
            append("水果都被吃完了")
            toString()
        }
        println(result)
    }

标准函数run

run函数不能直接调用,一定要调用某个对象的run函数才行,run函数只接收一个Lambda表达式作为参数,并且会在Lambda表达式中提供上下文,并把Lambda表达式的最后一行代码作为返回值返回

val list = listOf("Apple", "Banana", "Orange")
        val result = StringBuilder().run {
            append("开始吃水果\n")
            for (fruit in list) {
                append(fruit).append("\n")
            }
            append("水果被吃完")
            toString()
        }
        println(result)

标准函数apply

同样是在某个对象上调用,并接收一个Lambda表达式作为参数,但无法指定返回值

val intent = Intent(context,MainActivity::class.java).apply { 
            putExtra("param1","1")
            putExtra("param2","2")
        }

延迟初始化

private lateinit var adapter: RecyclerListAdapter

    private fun init() {
        adapter = RecyclerListAdapter()
    }

判断是否已经完成了初始化

if (!::adapter.isInitiallized) {
	adapter = RecyclerListAdapter()
}

密封类

它是一个可继承的类,Kotlin编译器会自动检查密封类有哪些子类,并强制要求将每一个子类所对应的条件全部处理。密封类及其子类只能定义在同一个文件的顶层位置,不能嵌套在其他类中。

sealed class Result

class Success(val msg: String) : Result()

class Failure(val error: Exception) : Result()

fun getResultMsg(result: Result) = when (result) {
    is Success -> result.msg
    is Failure -> "Error is ${result.error.message}"
}
sealed class MsgViewHolder(view: View): RecyclerView.ViewHolder(view)

class LeftViewHolder(view: View): MsgViewHolder(view)

class RightViewHolder(view: View): MsgViewHolder(view)

class MsgAdapter(val msgList: List<String>): RecyclerView.Adapter<MsgViewHolder>() {
    override fun onBindViewHolder(holder: MsgViewHolder, position: Int) {
        val msg = msgList[position]
        when (holder) {
            is LeftViewHolder -> holder.leftMsg = msg.leftText
            is RightViewHolder -> holder.rightMsg = msg.rightText
        }
    }
}

扩展函数

fun Any.log() {
    Log.d("测试日志", this.toString())
}

fun test1() {
    "Kotlin扩展函数真牛".log()
}

运算符重载

class Money(val value: Int) {

    operator fun plus(money: Money): Money {
        val sum = value + money.value
        return Money(sum)
    }
}

fun test2() {
    val money1 = Money(5)
    val money2 = Money(10)
    val money3 = money1 + money2
    println(money3.value)
}

多重重载

class Money(val value: Int) {

    operator fun plus(money: Money): Money {
        val sum = value + money.value
        return Money(sum)
    }

    operator fun plus(newValue: Int): Money {
        val sum = value + newValue
        return Money(sum)
    }
}

fun test2() {
    val money1 = Money(5)
    val money2 = Money(10)
    val money3 = money1 + money2
    val money4 = money3 + 20
    println(money4.value)
    println(money3.value)
}

热门文章

暂无图片
编程学习 ·

MapReduce原理及编程

文章目录一.关于MapReduce(一)什么是MapReduce?(二) MapReduce的设计思想(三) MapReduce特点(四)MapReduce实现WordCount(五)MapReduce执行过程(六)Key&Value类型二.MapReduce编程模型(一)InputFormat接口(二)Mapper类(三)Combiner类(四)Partitioner类(五)Reducer类(六)Ou…
暂无图片
编程学习 ·

小程序学习之路五:scroll-view实现多列布局

上面讲解了一些部分简单功能,接下来讲讲scroll-view的进阶,实现多列布局,先上效果:首先来看看布局文件<scroll-view class="scroll"><view class="item" wx:for={{datas}} wx:key=index wx:for-item="item" data-item="{{item…
暂无图片
编程学习 ·

荣耀X10 Max发布在即 屏幕优势显著

前一阵就听说了荣耀X10 Max将在7月2日发布的消息,不知不觉中已经只剩不到一周的时间了,作为今年唯一的5G大屏手机,人们关注的无非是它的屏幕,以及各项配置。刚刚荣耀X10 Max又有了更多的爆料信息,下面就跟大家来聊一聊这款即将发布的5G大屏手机。荣耀X10 Max采用了一块7.0…
暂无图片
编程学习 ·

RocketMQ 5:消息重试

1.创建消费者RetryConsumer,使用consumer.setMaxReconsumeTimes()方法可以设置重试次数,默认15次,返回ConsumeConcurrentlyStatus.RECONSUME_LATER;消费失败后,先会进入%RETRY%group1中,再到这个ConsumerGroup。而如果一直这样重复消费都持续失败超过重试次数,就会投递到D…
暂无图片
编程学习 ·

Zabbix简介

一、Zabbix介绍 Zabbix是一个企业级的、开源的、分布式的监控套件 Zabbix可以监控网络和服务的监控状况. Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警. 这样可以保证快速的对问题作出响应. Zabbix可以利用存储数据提供杰出的报告及图形化方式. 这一特性将帮助…
暂无图片
编程学习 ·

程序员:Java数据结构与算法——第十六章·算法设计技术详解

Java数据结构与算法-第十六章算法设计16.1引言在求解一个新问题时,通常的思路是寻找当前问题与已解决问题之间的相似之处,从而轻松找到新问题的求解方法。本章将对各种算法按照不同的方法进行分类,然后在随后的3章中分别介绍3个算法设计思想(即贪婪、分治和动态规划)。16.2分…
暂无图片
编程学习 ·

整理得吐血了,二叉树、红黑树、B&B+树超齐全,快速搞定数据结构

前言没有必要过度关注本文中二叉树的增删改导致的结构改变,规则操作什么的了解一下就好,看不下去就跳过,本文过多的XX树操作图片纯粹是为了作为规则记录,该文章主要目的是增强下个人对各种常用XX树的设计及缘由的了解,也从中了解到常用的实现案例使用XX树实现的原因。数据…
暂无图片
编程学习 ·

linux usb usbip驱动详解(二)

终于来到usbip驱动代码分析了!我们在做产品时,通常是先讨论方案、制定协议、编码和测试。usbip的方案是行得通的,它是从URB对象获取信息,然后从tcp发送出去的,URB是linux usb子系统里面用于抽象usb通信而精心设计的对象,只要server和client两边在恰当的时机分别隔断各自系…
暂无图片
编程学习 ·

typescript学习笔记

typescript是微软开发的一个javascript的一个超集。支持es6规范。它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。es是客户端脚本的规范,es5,es6是这些规范的不同版本。JavaScript与typescript是两种客户端脚本语言,JavaScript实现了es5规范,t…
暂无图片
编程学习 ·

通过2020年阿里云云计算ACE认证总结附真题笔记

一、考前准备 1.1 近期刚刚通过阿里云ACE考试,做一下笔记和心得。 1.自己预留一个月时间复习,去官网报名,官网地址就不用发了吧。 2.考试每一道题库都是很精心的题目,需要你考虑很周到,细节,亚注意细节,比如题目基本都是你自己身为架构师,怎么解决企业架构的问题同时还…
暂无图片
编程学习 ·

2020抖音小店入驻流程

原文链接:https://blog.ccswust.org/15574.html一、访问入驻后台使用电脑浏览器打开网址https://sso.douyin.com/login/?service=https://fxg.jinritemai.com/index.html#/home,选择【抖音号登陆】,【重要,一定要登录自己的抖音号,才能把店铺和抖音号绑定在一起】※建议请…
暂无图片
编程学习 ·

资本加速圈地,智慧停车战火越烧越旺

配图来自Canva 半年前,AIPARK爱泊车宣布完成B1和B2轮融资,投资方包括中美绿色一期基金、蔚来资本、中金资本、中关村启航基金等。 6月3日,城市级智慧云停车平台享停车宣布已完成数千万元融资,并获得了上亿元配套建设资金,投资方为深圳某机构。 6月28日,AIPARK爱泊车宣布完…
暂无图片
编程学习 ·

大数据独角兽TOP10榜单发布,“内永洪,外Tableau”领跑BI领域

近日,“2020大数据独角兽企业排行榜”重磅发布,国内厂商永洪科技和国际厂商Tableau双双入选TOP10,领跑BI &数据分析领域。在行业内,一直有着“内永洪,外Tableau”的说法。用一句话概括就是,Tableau是国际领头羊,永洪科技是国内领导者。 1、主办方是如何看待数据分析…
暂无图片
编程学习 ·

SSM整合(crud)

这是一个基于员工部门的bootstrap+ssm+maven的整合demo 部分图片如下所示:1.MyBatis逆向工程(MBG)自动生成代码 2.PageHelper分页插件 3.基于Maven的Spring+SpringMVC+MyBatis整合 4.使用BootStrap搭建前端页面,result风格,ajax异步请求(前端校验+后端校验JSR303+数据库约束,保…
暂无图片
编程学习 ·

java项目异常处理设计

项目结构 异常设计 公司项目,项目分三层使用ssi(struts2.spring.ibatis),种种原因异常处理比较模糊,目前编程人员对异常处理没有概念,统一梳理以作记录.xxxDao–interface–throws Exception xxxBo–interface–throws Exception xxxBoImpl–class–try()catch{}–throws Excep…
暂无图片
编程学习 ·

Kylin构建及调优基础知识

文章目录1. Kylin设计核心思想2. Kylin基本架构3. 基本概念4. Cube构建及优化4.1 Cube构建及优化总览4.2 Cube构建分步骤说明4.2.1 Cube Info4.2.2 Dimensions4.2.3 Measures4.2.4 Refresh Setting4.3 Cube 构建前优化策略4.3.1 Advanced Settings4.3.1.1 Aggregation Groups4.…
暂无图片
编程学习 ·

【DVWA】文件上传_全级别

1.low级别 <?phpif( isset( $_POST[ Upload ] ) ) {// Where are we going to be writing to?$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ uploaded ][ name ] );// Can we move the file to the upload …