1.创建DTOs(POJOs/POCOs)
<code>data </code><code>class</code> <code>Customer(val name: String, val email: String)</code>
创建一个Customer类需要提供下面功能:
getters 为所有的属性提供getters(为var类型提供setters, val类型不可变,不需要提供)
equals()
hashcode()
toString()
copy()
component1(), component2(), …, for all properties (see Data classes)
2. 为函数提供默认参数
<code>fun foo(a: Int = </code><code>0</code><code>, b: String){</code>
<code> </code><code>println(</code><code>"a: ${a}, b: ${b}"</code><code>)</code>
<code>}</code>
3. 过滤一个列表
<code>var posi = lists.filter { a->a.startsWith(</code><code>'a'</code><code>) }</code>
或者更简洁:
<code>posi = lists.filter { it.startsWith(</code><code>'a'</code><code>) }</code>
4. String插入
<code>println(</code><code>"Name $name"</code><code>)</code>
5. 示例检查
<code>when (x) { </code>
<code> </code><code>is Foo -> ... </code>
<code> </code><code>is Bar -> ... </code>
<code> </code><code>else</code> <code>-> ...</code>
6. 打印map和或者list
<code>var maps = mapOf(</code><code>"a"</code> <code>to </code><code>1</code><code>, </code><code>"b"</code> <code>to </code><code>2</code><code>, </code><code>"c"</code> <code>to </code><code>3</code><code>)</code>
<code>for</code><code>((k,v) in maps){</code>
<code> </code><code>println(</code><code>"k: ${k}, v: ${v}"</code><code>)</code>
7. 使用'范围'
<code>for</code><code>(i in </code><code>1</code><code>..</code><code>100</code><code>) {</code>
<code> </code><code>print(</code><code>"${i} "</code><code>)</code>
<code> </code>
<code>for</code><code>(i in </code><code>1</code> <code>until </code><code>10</code><code>) {</code>
<code>for</code><code>(x in </code><code>1</code><code>..</code><code>10</code> <code>step </code><code>2</code><code>) {</code>
<code>for</code><code>(x in </code><code>10</code> <code>downTo </code><code>1</code><code>) {</code>
<code> </code>
<code>var x = </code><code>3</code>
<code>if</code> <code>(x in </code><code>1</code><code>..</code><code>10</code><code>) {</code>
<code> </code><code>println(</code><code>"xxx in"</code><code>)</code>
8. 只读list(注意var和val区别)
<code>val list = listOf(</code><code>"a"</code><code>, </code><code>"b"</code><code>, </code><code>"c"</code><code>)</code>
9. 只读map
<code>val map = mapOf(</code><code>"a"</code> <code>to </code><code>1</code><code>, </code><code>"b"</code> <code>to </code><code>2</code><code>, </code><code>"c"</code> <code>to </code><code>3</code><code>)</code>
10. 访问map
<code>println(maps[</code><code>"b"</code><code>])</code>
11. 懒汉式属性?
<code>val p: String by lazy { </code>
<code> </code><code>// compute the string</code>
12. 扩展功能(个人觉得比较强大,类似于注入?)
<code>fun String.testAddMethod(){</code>
<code> </code><code>println(</code><code>this</code><code>)</code>
<code>"abcd"</code><code>.testAddMethod()</code>
13. 单例
<code>object Resource {</code>
<code> </code><code>val name = </code><code>"name Resource"</code>
14. if != null的快速写法
<code>val files = listOf(</code><code>"a"</code><code>, </code><code>"b"</code><code>, </code><code>"c"</code><code>)</code>
<code>println(files?.size)</code>
15. if else 快速写法
<code>fun getNil():String?{</code>
<code> </code><code>return</code> <code>null</code>
<code>fun main(args: Array<String>) {</code>
<code> </code><code>var files = getNil()</code>
<code> </code><code>println(files?.length?: </code><code>"empty"</code><code>)</code>
16. 如果为null执行一段语句
<code>files?:println(</code><code>"is null"</code><code>)</code>
17. 如果不为null执行一段语句
<code>files?.let { println(</code><code>"not null"</code><code>) }</code>
18. 通过when语句返回
<code>var string = </code><code>"b"</code>
<code>println(when(string) {</code>
<code> </code><code>"a"</code> <code>-></code><code>0</code>
<code> </code><code>"b"</code> <code>-></code><code>1</code>
<code> </code><code>else</code> <code>-> </code><code>100</code>
<code>})</code>
19. try/catch表达式
<code>fun test() { </code>
<code> </code><code>val result = </code><code>try</code> <code>{ </code>
<code> </code><code>count() </code>
<code> </code><code>} </code><code>catch</code> <code>(e: ArithmeticException) { </code>
<code> </code><code>throw</code> <code>IllegalStateException(e) </code>
<code>} </code><code>// Working with result}</code>
20. if表达式
<code>val a = </code><code>2</code>
<code>var result = </code><code>if</code><code>(a == </code><code>1</code><code>) {</code>
<code> </code><code>"one"</code>
<code>} </code><code>else</code> <code>if</code><code>(a == </code><code>2</code><code>) {</code>
<code> </code><code>"two"</code>
<code>}</code><code>else</code> <code>{</code>
<code> </code><code>"three"</code>
21. 使用构造者模式
<code>fun arrayMinusOnes(size: Int):IntArray {</code>
<code> </code><code>return</code> <code>IntArray(size).apply { fill(-</code><code>1</code><code>) }</code>
22. 单一表达式函数
<code>fun single(size: Int) = size * </code><code>10</code>
<code>相当于是:</code>
<code>fun single(size: Int): Int {</code>
<code> </code><code>return</code> <code>size * </code><code>4</code>
<code>这个可以和其他约定一起组合,产生更简短的代码,比如when表达式:</code>
<code>fun transfrom(color: Int):String = when (color) {</code>
<code> </code><code>1</code><code>-> </code><code>"red"</code>
<code> </code><code>2</code><code>-> </code><code>"blue"</code>
<code> </code><code>else</code><code>-> </code><code>"other color"</code>
23. 调用一个对象的多个方法使用with
省略了obj.xxx()
<code> </code><code>val kotlin = RunKotlin()</code>
<code> </code><code>with(kotlin) {</code>
<code> </code><code>penDown()</code>
<code> </code><code>println(</code><code>"zzz"</code><code>)</code>
<code> </code><code>forward(</code><code>2.0</code><code>)</code>
<code> </code><code>}</code>
<code>class</code> <code>RunKotlin {</code>
<code> </code><code>fun penDown(){println(</code><code>"penDown"</code><code>)}</code>
<code> </code><code>fun penUp(){println(</code><code>"penUp"</code><code>)}</code>
<code> </code><code>fun turn(degress: Double){println(degress)}</code>
<code> </code><code>fun forward(pixels: Double){println(pixels)}</code>
24. Java 7's try with resources
<code>val stream = Files.newInputStream(Paths.get(</code><code>"/some/file.txt"</code><code>))</code>
<code>stream.buffered().reader().use { </code>
<code> </code><code>reader -> println(reader.readText())</code>
25. Convenient form for a generic function that requires the generic type information
<code>/ </code><code>public</code> <code>final</code> <code>class</code> <code>Gson {</code>
<code>// ...</code>
<code>// public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {</code>
<code>inline fun <reified T: Any> Gson.fromJson(json): T = </code><code>this</code><code>.fromJson(json, T::</code><code>class</code><code>.java)</code>
26. 构造可能为null的布尔值
<code>val b: Boolean? = ...</code>
<code>if</code> <code>(b == </code><code>true</code><code>) { </code>
<code> </code><code>...</code>
<code>} </code><code>else</code> <code>{ </code>
<code> </code><code>// `b` is false or null</code>
本文转自rongwei84n 51CTO博客,原文链接:http://blog.51cto.com/483181/1931893,如需转载请自行联系原作者