Kotlin 符号,高阶函数,内联函数,Lambda 表达式
特殊符号?表示 是否允许空值的存在!!表示 如果对象为null,那么系统一定会报异常!?:表示 对象A ?: 对象B 表达式,意思为,当对象 A值为 null 时,那么它就会返回后面的对象 B。::表示 Kotlin 中 双冒号操作符 表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。->表示 一般用于函数类型的连接符号===和==的区别 在Kotlin中,=== 表示比较对象地址,== 表示比较两个值大小。
高阶函数一个函数如果参数类型是函数或者返回值类型是函数,那么这就是一个高阶函数。
函数类型其实就是将函数的 “参数类型” 和 “返回值类型” 抽象出来例如:
1var add(a:Int,b:Int) = a+b
他的函数类型就是(Int,Int)->Int而高阶函数意味着他而已接受一个函数的参数,或者他返回一个函数。例如:
1234567891011121314//在以下main函数中,将show函数传递给了showUserName作为参数使用。//除了可以使用已存在的函数, ...
Kotlin集合操作符详解
继续学习
集合操作符在kotlin中,关于集合的操作符分为6种,分别是:总数擦欧总夫,过滤操作符,映射操作符,顺序操作符,生产操作符和元素操作符。
总数操作符太多内容,不一一列举,使用时可以再上网察看
1234567val a = listOf(1, "2", 43, true) println(a.any())//true println(a.any { it is Number })//true println(a.all { it is Int })//false println(a.count())//4 println(a.count { it is Number })//2 a.forEach { println(it) }
过滤操作符drop():从第一项开始去除前n个元素,并返回剩余的元素列表。dropWhile{}:根据给定函数从第一项开始去掉指定元素,直到不满足条件为止的前面的元素,并返回剩余元素列表。dropLastWhile{} ...
Kotlin 基础类型和集合
继续学习
元组(Tuple)有两种元组,Pair(a,b),Triple(a,b,c)他们属于简单类型,被赋值的元素可以通过次序来调用他们
1234var result = Triple(1,2,3) println(result) println(result.first) println(result.second)
init对象内的初始化方法,当对象被创建时,便会调用该方法。每次创建都会调用init。
array和Listarray数组,它可以通过arrayOf()来创建。其中可以放不同种类的数据类型。数组是不可变的,他没有增加和删减的方法。如果需要改变数组的内容,可以让他重新赋值,通过plus来新增数据
1234var c = arrayOf(1,"滚犊子",4,5) c = c.plus(arrayOf(1,2,3,4)) println(c) println(c.contentToString())
而且array类型的toString()并没有重写,如果需要输出具体数据内容的话,需要使用contentToString()而 ...
浏览器解析JSON数据受响应头影响
已知,很多浏览器会默认去解析从api获取到的json格式的数据。但是却无法解析成功。这是因为浏览器解析这个数据是需要判断返回值的headers的。例如:当我向后端发送请求时,如果response的header为Content-Type:text/plain。那么该浏览器便不会对他进行解析,而是默认为字符串。此时后端程序为
123456get("/api/sentence"){// call.response.headers.append("Content-Type", "application/json") val number = (0..1000).random() call.respond(JSONUtil.toJsonStr(readText?.get(number))) }
前端查看到的数据为此时的响应头为此时如果需要浏览器可以解析数据。只需要将上述代码的//去除,然后他返回的标头便会变为applicatio ...
Kotlin委托机制概述
kotlin委托机制就我目前遇到的问题时,该知识点并不需要我太关心,因此挂一个链接在这掘金
Kotlin和Java互操作限制与解决方案
正常情况下,kotlin做为优化后的java他们两是可以做到相互操作的。而且可以没有任何第三方库加持。而在某些时候会发现他们不能一起使用。会报以下错误
12345678Exception in thread "main" java.lang.NoClassDefFoundError: entity/SSchool at MainKt.test(Main.kt:19) at MainKt.main(Main.kt:16)Caused by: java.lang.ClassNotFoundException: entity.SSchool at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader ...
Mock助力前端后端异步开发
ApiFox在使用apifox时,才深知mock的作用。简直不要太好用了呀。在没有mock的时候,前端和后端分开开发,必须要等后端把功能完善好了才可以获取到数据,而这往往会降低开发效率,前端必须等后端开发完才能开始开发(这里指的是那种依托后端数据的情况)。同时在后端开发后,往往需要API文档,前端才能够完成正确的开发。非常的耗时耗力。而这。也正是apifox解决的问题所在。
简单来说,mock就是用来模拟数据给前端去使用的。前端通过mock可以与后端实现异步开发。大大的提高效率,而且通过apifox不仅实现了前后端快速开发。而且使得api文档也可以快速生成。以上只是帮助理解mock的含义和概念,具体使用请查看apifox的官方文档
引用自掘金
Java序列化:实现对象传输
java对象为什么要实现Serialiable接口?Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象,也就是说,可以使用表示对象及其数据的类型信息和字节在内存中重新创建对象。
关键就是可以通过流的形式实现对象的传输。
获取 Kotlin 项目的实际目录
如何再kotlin中获取当前项目的实际目录。
调用基于java实现的方法。123import java.nio.file.Pathsval path = Paths.get("").toAbsolutePath().toString()
通过系统获取当前目录1val path = System.getProperty("user.dir")
轻量级Python环境管理:Miniconda
anaconda作为python的版本管理神器,但由于他的体积太大,安装后大概占约2G左右的空间,因此这里推荐使用miniconda。下载安装conda由于官网下载太慢,因此推荐去(清华大学开源软件镜像站下载)[https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?C=M&O=D]
修改conda源安装后,需要进行换源,不然下载,导包都会异常缓慢。
conda配置文件位置:~/.condarc (Windows路径为:C:\Users.condarc)
清华源配置,通常配置写入标准库的内容即可,若要使用附加库的内容才将其插入“ - defaults”那一行前面:12345678910channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ - https://mirrors.tuna.tsinghua.ed ...