作家
登录

如何避免Kotlin里的陷阱?

作者: 来源: 2017-10-20 11:42:15 阅读 我要评论

"baz.qux"
  • list.forEach { 
  •     it.split(".").forEach { 
  •         println(it) 
  •     } 
  • it 参数会混淆。解决办法就是像下面如许显示的声明:

    1. list.forEach { item -> 
    2.     item.split(".").forEach { part -> 
    3.         println(part) 
    4.     } 

    看起来是不是很多多少了!

    隐蔽的复制

    留意不雅察下面的类:

    1. data class Foo(val bars: MutableList) 

    data 类供给了一系列的办法,并且你可以经由过程拷贝获得其镜像。猜猜下面的代码会输出什么?

    1. val bars = mutableListOf("foobar""wombar"
    2. val foo0 = Foo(bars) 
    3. val foo1 = foo0.copy() 
    4. bars.add("oops"
    5. println(foo1.bars.joinToString()) 

    控制台会输出 foobar, wombar, oops。问题出在 copy 办法并没有真正地复制一个完全的对象, 而是复制了对象的引用。当你忘记编写单位测试类,并且将你的 data 类按照弗成变类来传递的时刻,就可能出现这种问题。

    解决办法就是当你应用 data 类的时刻必定要多加当心,并且当你必须将其作为值对象的时刻,像下面如许:

    1. data class Foo(val bars: List) 
    • data 类还有一个问题:其 equals / hashCode 办法所用到的属性弗成变。你只能经由过程手工重写这些办法的方法来修改返回值。谨记膳绫擎这一点。

    内部办法裸露

    这种情况下,你应用了可能返回 null 值的 peek 办法。然则 Kotlin 编译器不会提示你这个问题,所以当你的 Queue 是空队列的的时刻,可能会触发 NullPointerException 异常。

    细心思虑下面的例子:

    1. class MyApi { 
    2.     fun operation0() { 
    3.     } 
    4.     internal fun hiddenOperation() {             
    5.     } 

    Kotlin 供给了 JDK 集合类的弗成变版本。

    每个跳转到你的办法的人都邑不知所措。所以我认为在你编写如许的办法之前务必三思。下面就是一个建议:

    在 Kotlin 傍边,你可以不消推敲在你的代码中若何处理 null 的问题,这会让你忘记 null 是无处不在的┞封个说法,只不过被隐蔽了起来。看看下面这个外面看起来没有问题的类:

    当你在 Kotlin 的项目中引用这个类的时刻,internal 关键字是生效的。然则当你年腋荷琐 Java 项目中应用的时刻,hiddenOperation 就变成了一个公共办法!为了避免这种情况,我建议应用接口的方法来隐蔽实现的细节:

    问题在于我们应用的 Queue 是 JDK 的一个接口,并且当你查看 peek 办法的文档瓯:

    1. interface MyApi { 
    2.     fun operation0() 
    3. class MyApiImpl: MyApi { 
    4.     override fun operation0() { 
    5.     } 
    6.     internal fun hiddenOperation() { 
    7.     } 

    特别的全局扩大

    毫无疑问,扩大函数的功能异常重要。但平日,才能越大年夜义务越大年夜。例如,你可以编写全局的 JDK 类扩大函数。然则当这个函数只在本地高低文中有意义,倒是全局可见的时刻,就会带来很多麻烦。

    1. fun String.extractCustomerName() : String { 

        推荐阅读

        2017 年 Python 使用情况报告,你用 2.x 还是 3.x?

      沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!纵不雅各大年夜编程说话在 2017 年的成长情况,我们会发明 Python 的成长速度异常快。Semaphore 社区查询拜访了 Python 在>>>详细阅读


      本文标题:如何避免Kotlin里的陷阱?

      地址:http://www.17bianji.com/lsqh/38070.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)