天天看点

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

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-&gt;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 -&gt; ...    </code>

<code>    </code><code>is Bar -&gt; ...    </code>

<code>    </code><code>else</code>   <code>-&gt; ...</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&lt;String&gt;) {</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>-&gt;</code><code>0</code>

<code>    </code><code>"b"</code> <code>-&gt;</code><code>1</code>

<code>    </code><code>else</code> <code>-&gt; </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>-&gt; </code><code>"red"</code>

<code>    </code><code>2</code><code>-&gt; </code><code>"blue"</code>

<code>    </code><code>else</code><code>-&gt; </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 -&gt;    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 &lt;T&gt; T fromJson(JsonElement json, Class&lt;T&gt; classOfT) throws JsonSyntaxException {</code>

<code>inline fun &lt;reified T: Any&gt; 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,如需转载请自行联系原作者