
Kotlin
lioil.win
这个作者很懒,什么都没留下…
展开
-
Kotlin-50.JavaScript反射(JavaScript Reflection)
官方文档: http://kotlinlang.org/docs/reference/js-reflection.htmlJavaScript反射JavaScript Reflection,在JavaScript平台,Kotlin不支持完整的反射API!仅支持::class语法,精简的KClass(仅支持simpleName和isInstance成员),通过它可以获取对象类引用,KClass.js获取JsClass原创 2017-07-24 22:02:33 · 873 阅读 · 0 评论 -
Kotlin-37.类型别名(typealias)
类型别名(Type aliases)自kotlin 1.1起,类型别名(Type alias)为现有类型提供替代名称,如果类型名称太长,可引入较短别名替代原类型名!为集合类型(collection type)提供别名,缩短较长泛型类型(generic type)是很有吸引力的:为函数类型(function type)提供别名(alias);为内部类(inner)和嵌套类(nested)创建别名;类型别名不会引入新类型原创 2017-07-09 21:48:38 · 1410 阅读 · 0 评论 -
Kotlin-36.类型安全的构建器/生成器(Type-Safe Builders)
kotlin,Html构建器(生成器)示例本例构建/生成一个HTML树(文档),扩展函数和带接收者的lambda表达式,html { head { title {+"XML encoding"} } body { h1 { +"...,函数类型是HTML.() -> Unit,函数带接收者是HTML类,String.unaryPlus()重载+,控制接收者作用域@DslMarker,@HtmlTagMarker,原创 2017-07-09 18:18:19 · 1245 阅读 · 0 评论 -
Kotlin-35.反射(Reflection)
反射概念(Reflection),与java语言不同, 函数和属性是Kotlin世界的一等公民;添加kotlin反射库jar包kotlin-reflect.jar;类引用Class References,MyClass::class;类引用是KClass类型;函数引用(Function References);属性引用(Property References);与Java反射互操作 :class.java原创 2017-07-08 19:16:53 · 6111 阅读 · 0 评论 -
Kotlin-34.注解(Annotation)
声明Kotlin注解Annotation Declaration,和java类似,kotlin注解附加元数据metadata,annotation class,元注解,@Target,@Retention,@Repeatable,@MustBeDocumented;使用注解(Usage),属性访问器get/set注解,Lambda表达式;注解的构造函数;精确注解/使用处目标;在Kotlin中使用Java注解;原创 2017-07-07 23:57:25 · 3155 阅读 · 0 评论 -
Kotlin-33.异常(Exception)
异常类(Exception Classes),与java类似,Kotlin的所有异常类都是Throwable类的子孙类(都继承自Throwable类),成员都有消息message,堆栈跟踪stack trace和可选起因optional cause;try表达式有一个返回值;kotlin没有受检异常(Checked Exceptions),受检异常是一个错误;Nothing类型(The Nothing type);原创 2017-07-06 23:19:06 · 6080 阅读 · 0 评论 -
Kotlin-31.操作符/运算符重载(operator overload)
Kotlin允许操作符/运算符重载(operator overload),一元操作符Unary operations,a.unaryPlus(),a.unaryMinus(),a.not(),a.inc(),a.dec();二元操作符Binary operations,a.plus(b),b.contains(a),a.get(i),a.invoke(i),a.plusAssign(b),a.compareTo(b)原创 2017-07-04 23:56:04 · 5219 阅读 · 0 评论 -
Kotlin-32.空指针安全/null安全(Null Safety)
可空与非空类型Nullable types and Non-Null Types,Java最常见陷阱就是空指针异常NullPointerException,Null引用安全,十亿美元的错误,Kotlin类型系统旨在消除null引用,在条件中检查null,安全调用Safe Calls-操作符?. , ?:操作符-Elvis Operator, !! 操作符,b!!.length,可空元素-filterNotNull()原创 2017-07-05 23:47:24 · 870 阅读 · 0 评论 -
Kotlin-30.相等性(Equality)
与java不同, Kotlin有两种相等性equality(即两种等号):1.Referential equality引用相等(两个引用是否指向同一对象),三个等号===的比较,是比较对象引用(地址);2.Structural Referential结构相等(用equals()检查比较内容是否相等),两个等号==的比较,实际是通过equals()函数进行比较判断!数据类两个等号==(结构相等)比较的是对象数据!原创 2017-07-03 21:25:15 · 2291 阅读 · 0 评论 -
Kotlin-29.this表达式(this Expression)
在kotlin中,可用this表达式表示当前接收者(receiver)对象;1.在类成员函数中,this代指该类的当前对象;2.在扩展函数(extension function)或者带接收者的字面函数(function literal with receiver)中, this代指该函数的接收者对象参数(receiver parameter);访问外部作用域,this限定符(Qualifier)-this@label原创 2017-07-03 20:52:40 · 2877 阅读 · 0 评论 -
Kotlin-28.类型检查和转换(Type Cast)
1.is和!is操作符(Operators),kotlin在运行时,可用is或!is操作符来检查对象类型是否符合要求;2.智能转换(Smart Casts),与java不同,Kotlin一般不需要显式转换对象类型,对不可变的值,编译器能跟踪is操作符,自动插入类型转换;智能转换的适用条件,val局部变量,val属性;3.会抛出异常,不安全转换-操作符as;4.避免抛出异常,安全(可空)转换-操作符as?;原创 2017-07-02 23:29:06 · 4155 阅读 · 0 评论 -
Kotlin-27.区间/范围(Ranges)
区间/范围(Ranges)表达式: 由操作符..(rangeTo函数), in 和 !in 构成!任何可比较的类型(comparable type)都定义了区间,但整型原生类型的区间实现有优化!例子代码;整型区间迭代循环遍历;类似Java基于索引下标的for循环;Ranges区间的工作原理(How work);Utility function;rangeTo();downTo();reversed();step()原创 2017-07-02 22:30:02 · 2601 阅读 · 0 评论 -
Kotlin-38.标准库API总结(Standard Library)
Kotlin标准库Standard Library;kotlin包的介绍说明;kotlin公共库;kotlin公共库(Java和JS共用);Java平台的kotlin库(JVM);JavaScript平台的kotlin库(JS);JDK类扩展,处理文件流, IO, 线程;核心函数和数据类型,支持所有平台;kotlin.system;kotlin.browser;kotlin.dom;kotlin.js;JVM原创 2017-07-10 21:29:34 · 2116 阅读 · 0 评论 -
Kotlin-39.kotlin调用Java之一(Call Java from Kotlin)
在Kotlin中调用Java代码(Calling Java code from Kotlin)Kotlin在设计时就考虑了与Java的互操作性,所以可以轻松在Kotlin中调用现有Java代码,也能顺利在Java中调用Kotlin代码!在Kotlin使用Java的集合类,java字段成员Getter和Setter方法,被表示为kotlin属性;kotlin返回void的方法;Kotlin关键字标识符进行转义原创 2017-07-11 22:52:02 · 669 阅读 · 0 评论 -
Kotlin-49.JavaScript模块(JavaScript Module)
JavaScript模块(JavaScript Modules)Kotlin允许把Kotlin项目编译为JavaScript模块,可用js模块选项:Plain,不编译成任何模块;异步模块定义Asynchronous Module Definition,简称AMD;CommonJS约定,node.js/npm,require函数,module.exports,Unified Module Definitions,UMD原创 2017-07-23 22:21:57 · 824 阅读 · 0 评论 -
Kotlin-48.JavaScript调用Kotlin(Call Kotlin from JavaScript)
在JS平台上, kotlin代码会被Kotlin编译器转换成JavaScript类/函数/属性; 因此在JavaScript代码中可以自由地调用kotlin代码, 然而还有一些细节需要注意!1.独立JavaScript对象隔离声明(Isolating declar,Kotlin将其包结构暴露给JavaScript,@JsName注解修改JavaScript函数名,JavaScript映射Kotlin类型,原创 2017-07-22 23:57:05 · 1126 阅读 · 0 评论 -
Kotlin-47.Kotlin调用JavaScript(Call JavaScript from Kotlin)
官方文档,Kotlin调用JavaScript,被设计能够与Java平台轻松互操作,kotlin可将Java类转为Kotlin类,Java也将Kotlin类转为Java类!但JavaScript是一种动态类型语言,内联Inline JavaScript,external修饰符,类的静态成员,companion object,可选参数,definedExternally,external interface,open原创 2017-07-21 23:41:44 · 2376 阅读 · 0 评论 -
Kotlin-46.JavaScript动态类型(Dynamic Type)
官方文档,动态类型(Dynamic Type)Kotlin在面向JVM平台的代码中不支持动态类型(说白了就是java不支持动态类型)Kotlin是一种静态类型的语言,但JavaScript系统,为了帮助这些场景,kotLin语言中dynamic, in, !in以及..操作符,对于dynamic类型是被禁用, 定义JS动态类型val dyn: dynamic, 链式调用dyn.foo().bar.baz()原创 2017-07-20 22:57:28 · 893 阅读 · 0 评论 -
Kotlin-45.Java调用kotlin之三(Call Kotlin from Java)
@JvmName解决java方法签名相同(Handling signature clashes)类型擦除type erasure;无法区分List<String>和List<Int>;型变泛型(Variant generics);Nothing类型;throw IOException;@Throws(IOException::class);Java方法重载;受检异常(Checked Exception);原创 2017-07-19 22:57:10 · 867 阅读 · 0 评论 -
Kotlin-44.Java调用kotlin之二(Call Kotlin from Java)
官方文档: http://kotlinlang.org/docs/reference/java-to-kotlin-interop.html4.静态字段(Static Fields)在对象(object)或伴生对象(companion object)中声明的Kotlin属性,有静态的幕后字段(backing fields)!这些静态字段是私有private,但可通过以下方式暴露(公开public)原创 2017-07-18 23:57:13 · 2847 阅读 · 0 评论 -
Kotlin-43.Java调用kotlin之一(Call Kotlin from Java)
kotlin属性(Properties)Kotlin属性会被编译成以下Java元素:getter方法,属性名前加get,首字母大写;setter方法,只适用于var属性名前加set;private私有字段与kotlin属性同名;getter与属性名相同,setter将is替换为set;kotlin包级函数;Java类静态方法;@JvmName注解; @file:JvmName("Utils");@JvmField;原创 2017-07-17 22:27:34 · 636 阅读 · 0 评论 -
Kotlin-41.kotlin调用Java之三(Call Java from Kotlin)
Java数组Java Arrays不同,Kotlin数组是不型变,不允许把Array<String>赋值给Array<Any>,也禁止把子类数组作为超类/父类数组传给Kotlin函数/方法,与Java代码交互,每种原生/基本类型数组都有对应的kotlin类(IntArray,DoubleArray,CharArray等;removeIndices(int... indices),展开运算符*,(*array)原创 2017-07-14 23:33:58 · 646 阅读 · 0 评论 -
Kotlin-40.kotlin调用Java之二(Call Java from Kotlin)
Java空安全和平台类型Null-Safety Platform Type;在Java中任何引用都可能是null,Java类型在Kotlin被特别对待;Java类型映射(Mapped type);Java基本类型映射到相应Kotlin类型;Java包装类(基本类型)映射成可空Kotlin类;Java集合类型在Kotlin中既能只读,也能可变,因此有以下映射;Java数组在Kotlin中映射;Java泛型kotlin原创 2017-07-13 22:33:09 · 1135 阅读 · 0 评论 -
Kotlin-25.解构声明(Destructuring Declaration)
解构声明的概念和作用(destructuring declaration),把一个对象成员解构(destructure)成多个变量,component1(),componentN()等函数是Kotlin操作符,类似加减乘除,重载用operator;数据类(data class)自动声明componentN();函数返回多个变量;for循环解构声明;映射Map解构声明;下划线_未使用变量;lambda表达式参数解构;原创 2017-07-01 18:37:39 · 1794 阅读 · 0 评论 -
Kotlin-26.集合(Collection)
Kotlin区分可变和不可变集合(mutable and immutable collection),list,set,map,ArrayList,HashSet,HashMap,listOf,mutableListOf,setOf,mutableSetOf,MapOf; List<out T>,MutableList<T>;Set<T>,MutableSet<T>;Map<K,V>,MutableMap<K,V>原创 2017-07-01 23:56:37 · 3195 阅读 · 0 评论 -
Kotlin-11.可见性修饰符(Visibility Modifiers)
kotlin可见性修饰符Visibility Modifier: private, protected, internal, 默认public,默认public: 随处可见;private: 只在声明的文件内可见;internal: 在相同模块内随处可见;protected: 不适用于顶层声明;函数/属性/类/对象/接口都可在顶层声明(即直接在包内);类/接口的成员:构造函数;kotlin模块原创 2017-06-20 23:43:46 · 3592 阅读 · 0 评论 -
Kotlin-10.接口(interface)
Kotlin接口interface类似于Java 8,既可包含方法声明,也包含方法实现,抽象方法,实现接口,接口属性,在接口中的属性既可以是抽象的,也可以有访问器的实现,不能有幕后字段(backing field),多接口覆盖冲突,实现多个接口时,可能会遇到[覆盖多个接口中同名方法;类或者对象可以实现一个或多个接口;与Java一样,使用关键字interface定义接口:可以有属性,但只能声明为抽象或提供访问器实现!原创 2017-06-20 22:58:24 · 1530 阅读 · 0 评论 -
Kotlin-09.类属性和字段(Properties/Fields)
类属性和字段(Properties/Fields),类属性可用关键字var声明为可变的, val声明为只读;使用类属性,Java类字段成员变量;属性访问器Getters和Setters;get()=,set(value) { };改变访问器get和set可见性;幕后字段backing field,field=value;幕后属性(backing property);编译期常量const val;延迟lateinit原创 2017-06-19 23:21:47 · 1045 阅读 · 0 评论 -
Kotlin-08.类和继承(class/Inheritance)
类和继承(class/Inheritance);kotlin类有一个主构造函数,多个次构造函数;省略constructor,注解或可见性修饰符;主构造函数初始化init{ };主构造函数中声明类属性成员变量/字段;声明前缀有 constructor 的次构造函数;类实例对象,Kotlin没有new关键字;继承,共同父类Any;初始化基类构造函数;覆盖父类方法;可覆盖的成员(open)和覆盖后的成员(override)原创 2017-06-18 23:42:40 · 1121 阅读 · 0 评论 -
Kotlin-07.返回和跳转(return/break/continue)
Kotlin和java一样,有三种结构化跳转表达式:return,从包围它的函数或匿名函数返回;break,终止循环,continue跳出本次循环,继续下一次循环; ?: ;break和continue @标签,break@loop,continue@loop;return @标签,return@lit;return@forEach;匿名函数替代lambda表达式;return@a;和Java不同的,作为更大表达式的原创 2017-06-17 17:17:14 · 4160 阅读 · 0 评论 -
Kotlin-06.控制流程(control flow)
控制流程(control flow),if语句/if表达式,在Kotlin中if可作为表达式返回值,Kotlin 没有三目/元运算符( a>b ? a : b );when语句/when表达式,when将参数和分支条件进行顺序比较, when语句取代了类C语言/java的switch语句;for循环,可循环遍历提供了迭代器的对象,成员函数或者扩展函数 iterator(),next(),hasNext;while循环原创 2017-06-15 22:48:09 · 541 阅读 · 0 评论 -
Kotlin-05.包和导入(package & import)
包和导入(package & import),package com.demo,kotlin默认导入包,kotlin.*;kotlin.annotation.*;kotlin.collections.*;kotlin.comparisons.* (自 Kotlin 1.1 起);kotlin.io.*;kotlin.ranges.*;包名冲突,可用as重命名消歧义;Kotlin 没有import static导原创 2017-06-14 23:12:13 · 1595 阅读 · 0 评论 -
Kotlin-04.基本类型/数据类型(Basic Types)
基本类型/数据类型(Basic Types),Double,Float,Long,Int,Short,Byte;Kotlin字符Char不能转为数字;数值字面常量十进制/十六进制/二进制,kotlin不支持八进制,下划线分割数字;可null引用(有问号?)或者泛型,数字自动装箱,三个等号===对象地址,两个等号==对象数值;数字类型显式转换,范围较小不能隐式转换为范围较大;数组arrayOf,Array;字符串模板;原创 2017-06-13 23:05:02 · 1855 阅读 · 0 评论 -
Kotlin-03.编码规范/代码风格(Coding Conventions)
命名风格如果不确定,默认使用Java的编码规范,使用驼峰法命名(并避免命名含有下划线)类型名以大写字母开头方法和属性以小写字母开头使用 4 个空格缩进冒号;Lambda表达式;类头格式化;省略Unit;无参的函数可与只读属性互换原创 2017-06-13 21:11:25 · 2113 阅读 · 0 评论 -
Kotlin-02.惯用语法/语法习惯(Idioms)
Kotlin惯用语法/语法习惯(Idioms):一些在Kotlin中广泛使用的语法习惯;创建 DTOs/POJOs/POCOs;data class;函数默认参数;list.filter{ };字符串内插变量"Name $name";类型判断is Foo;遍历map/pair型list;区间in;只读list/map;扩展函数;单例类object;?和null;返回when/try/if表达式;单表达式函数;with原创 2017-06-12 23:56:56 · 724 阅读 · 0 评论 -
Kotlin-01.入门介绍和基础语法(Basic Syntax)
Kotlin入门介绍/基础语法(Basic Syntax);JetBrains公司;Groovy,Scala,Clojure;JVM语言;.clas字节码;Android Studio 3.0;Kotlin基础语法;Kotlin注释;定义包名;定义函数;定义局部变量val/var;字符串模板;条件表达式if/when;可空null;类型检查和自动转换;循环for;循环while,区间/范围in,集合;lambda原创 2017-06-11 19:23:18 · 801 阅读 · 0 评论 -
Kotlin-12.扩展函数和属性(extensions)
Kotlin支持扩展函数和扩展属性(extensions),kotlin使用扩展(动机)原因;扩展静态解析,不是虚函数(即没有多态);调用只取决于对象声明类型决定,而不是由对象实际类型决定;可空接收者null;kotlin扩展属性;伴生对象扩展函数和属性;kotlin作用域,扩展直接在包中;扩展作为类成员;分发接收者(dispatch receiver);扩展接收者(extension receiver);原创 2017-06-21 23:02:37 · 2698 阅读 · 0 评论 -
Kotlin-13.数据类(data class)
数据类的概念(data class)在Kotlin中一些只保存数据的类;编译器会为数据类(data class)自动生成函数equals()/hashCode();toString();componentN();copy();主构造函数至少有一个参数;所有参数需标记为val 或 var;不能是抽象、开放、密封或者内部的;数据类data class有两种相等性(equality)三个等号===,两个等号==,比较区别原创 2017-06-22 22:40:22 · 9591 阅读 · 0 评论 -
Kotlin-24.协程和线程(Coroutine & Thread)
自Kotlin 1.1起开始有协程(coroutines),一些耗时操作阻塞线程;线程阻塞和协程挂起的区别(Blocking VS Suspending);挂起函数(Suspending functions);suspend fun;协程内部机制原理;协程的实验状态(Experimental status);协程的标准API(Standard APIs);协程和线程/进程的区别;挂起函数是虚拟;挂起函数不能在普通函数原创 2017-06-30 23:55:39 · 17150 阅读 · 0 评论 -
Kotlin-23.内联函数(Inline Functions)
内联函数的概念和作用Inline Function;使用高阶函数higher-order function导致性能损耗;禁用内联notInlined,inlined;非局部返回Non-local return,return错误,不允许return;crossinline;泛型类型参数的具体化Reified type parameters,<reified T>;内联属性Inline properties;原创 2017-06-29 23:19:54 · 2953 阅读 · 0 评论