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,如需转载请自行联系原作者



上一篇:殷浩详解DDD:领域层设计规范


下一篇:格式化字符串漏洞利用 五、爆破