22. Kotlin学习笔记 (一) 约定

简介:

1.创建DTOs(POJOs/POCOs)

1
data  class  Customer(val name: String, val email: String)

创建一个Customer类需要提供下面功能:

getters 为所有的属性提供getters(为var类型提供setters, val类型不可变,不需要提供)

equals()

hashcode()

toString()

copy()

component1(), component2(), …, for all properties (see Data classes)


2.  为函数提供默认参数

1
2
3
fun foo(a: Int =  0 , b: String){
     println( "a: ${a}, b: ${b}" )
}


3. 过滤一个列表

1
var posi = lists.filter { a->a.startsWith( 'a' ) }

或者更简洁:

1
posi = lists.filter { it.startsWith( 'a' ) }


4. String插入

1
println( "Name $name" )


5. 示例检查

1
2
3
4
5
when (x) {    
     is Foo -> ...    
     is Bar -> ...    
     else    -> ...
}


6. 打印map和或者list

1
2
3
4
var maps = mapOf( "a"  to  1 "b"  to  2 "c"  to  3 )
for ((k,v) in maps){
     println( "k: ${k}, v: ${v}" )
}


7. 使用'范围'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
for (i in  1 .. 100 ) {
     print( "${i} " )
}
     
for (i in  1  until  10 ) {
     
}
     
for (x in  1 .. 10  step  2 ) {
     
}
     
for (x in  10  downTo  1 ) {
         
}
     
var x =  3
if  (x in  1 .. 10 ) {
   println( "xxx in" )
}


8.  只读list(注意var和val区别)

1
val list = listOf( "a" "b" "c" )


9. 只读map

1
val map = mapOf( "a"  to  1 "b"  to  2 "c"  to  3 )


10. 访问map

1
2
var maps = mapOf( "a"  to  1 "b"  to  2 "c"  to  3 )
println(maps[ "b" ])


11. 懒汉式属性?

1
2
3
val p: String by lazy {    
     // compute the string
}


12. 扩展功能(个人觉得比较强大,类似于注入?)

1
2
3
4
5
6
fun String.testAddMethod(){
     println( this )
}
     
     
"abcd" .testAddMethod()


13. 单例

1
2
3
object Resource {
     val name =  "name Resource"
}


14. if != null的快速写法

1
2
val files = listOf( "a" "b" "c" )
println(files?.size)


15. if else 快速写法

1
2
3
4
5
6
7
8
9
fun getNil():String?{
     return  null
}
 
fun main(args: Array<String>) {
     var files = getNil()
     
     println(files?.length?:  "empty" )
}


16. 如果为null执行一段语句

1
files?:println( "is null" )


17. 如果不为null执行一段语句

1
files?.let { println( "not null" ) }


18. 通过when语句返回

1
2
3
4
5
6
var string =  "b"
println(when(string) {
     "a"  -> 0
     "b"  -> 1
     else  ->  100
})


19. try/catch表达式

1
2
3
4
5
6
fun test() {    
     val result =  try  {        
         count()    
     catch  (e: ArithmeticException) {        
         throw  IllegalStateException(e)    
}     // Working with result}


20. if表达式

1
2
3
4
5
6
7
8
9
val a =  2
     
var result =  if (a ==  1 ) {
     "one"
else  if (a ==  2 ) {
     "two"
} else  {
     "three"
}


21. 使用构造者模式

1
2
3
fun arrayMinusOnes(size: Int):IntArray {
     return  IntArray(size).apply { fill(- 1 ) }
}


22. 单一表达式函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fun single(size: Int) = size *  10
 
相当于是:
fun single(size: Int): Int {
     return  size *  4
}
 
这个可以和其他约定一起组合,产生更简短的代码,比如when表达式:
 
fun transfrom(color: Int):String = when (color) {
     1 ->  "red"
     2 ->  "blue"
     else ->  "other color"
}


23. 调用一个对象的多个方法使用with

省略了obj.xxx()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fun main(args: Array<String>) {
     val kotlin = RunKotlin()
     with(kotlin) {
         penDown()
         println( "zzz" )
         forward( 2.0 )
     }
}
 
class  RunKotlin {
     fun penDown(){println( "penDown" )}
     fun penUp(){println( "penUp" )}
     fun turn(degress: Double){println(degress)}
     fun forward(pixels: Double){println(pixels)}
}


24. Java 7's try with resources

1
2
3
4
val stream = Files.newInputStream(Paths.get( "/some/file.txt" ))
stream.buffered().reader().use { 
     reader ->    println(reader.readText())
}


25. Convenient form for a generic function that requires the generic type information

1
2
3
4
5
6
/   public  final  class  Gson {
//     ...
//     public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
//     ...
 
inline fun <reified T: Any> Gson.fromJson(json): T =  this .fromJson(json, T:: class .java)



26. 构造可能为null的布尔值

1
2
3
4
5
6
val b: Boolean? = ...
if  (b ==  true ) {    
     ...
else  {    
     // `b` is false or null
}



     本文转自rongwei84n 51CTO博客,原文链接:http://blog.51cto.com/483181/1931893,如需转载请自行联系原作者



相关文章
|
设计模式 Java Kotlin
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
131 1
|
2月前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
本篇笔记详细介绍了Kotlin中的类与构造器,包括类的基本概念、主构造器与次构造器的区别、构造器中参数的使用规则、类的继承以及构造器在继承中的应用等。通过具体示例,解释了如何在类中定义属性、实现构造逻辑,并探讨了Kotlin类的继承机制和Any类的作用。此外,还简要介绍了包的概念及其在组织代码中的作用。适合初学者深入理解Kotlin面向对象编程的核心概念。
37 3
|
2月前
|
Java 编译器 Kotlin
Kotlin学习笔记 - 数据类型
《Kotlin学习笔记 - 数据类型》是Kotlin编程语言学习系列的一部分,专注于Kotlin中的数据类型,包括布尔型、数字型(整型和浮点型)、字符型及字符串型,详述了各类型的定义、使用方法及相互间的转换规则。适合初学者快速掌握Kotlin基础语法。
30 3
|
2月前
|
安全 IDE Java
Kotlin 学习笔记- 空类型和智能类型转换
Kotlin 学习笔记聚焦于空类型和智能类型转换,深入解析非空与可空类型、安全调用操作符、Elvis 运算符、非空断言运算符及智能类型转换等内容,助你高效掌握 Kotlin 语言特性,避免 NullPointException 异常,提升代码质量。
31 2
|
2月前
|
Java 编译器 Kotlin
Kotlin学习笔记 - 数据类型
Kotlin学习笔记 - 数据类型
47 4
|
2月前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
Kotlin学习笔记- 类与构造器
34 3
|
2月前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
33 2
|
2月前
|
安全 IDE Java
Kotlin 学习笔记- 空类型和智能类型转换
Kotlin 学习笔记- 空类型和智能类型转换
57 2
|
2月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
47 0
|
2月前
|
设计模式 Java Kotlin
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
32 0