作家
登录

如何避免Kotlin里的陷阱?

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

沙龙晃荡 | 去哪儿、陌陌、ThoughtWorks在主动化运维中的实践!10.28不见不散!


比来 Kotlin 特别风行,并且我也赞成 Kotlin 是一个经由沉思熟虑后被设计出的说话,除了下面提到的缺点之外。我会在本文向你分析一些我在开辟过程中碰到的陷阱,并且教你若何避免他们。

若何避免Kotlin里的陷阱?

谜一样的 null

  1. class Foo { 
  2.     private val c: String 
  3.     init { 
  4.         bar() 
  5.         c = "" 
  6.     } 
  7.     private fun bar() { 
  8.         println(c.length) 
  9.     } 

如不雅你测验测验初始化这个类,那么代码就会抛出一个 NullPointerException。因为 bar 办法测验测验在 c 变量初始化之前就拜访它。

尽管这个代码本身就是有问题的,才导致异常抛出。然则更糟糕的是你的编译器不会发明这一点。

Kotlin 可以帮你在绝大年夜部分情况下避免 null,然则你不克不及是以而忘记 null 的存在。不然迟早有一天你会碰上类似的问题。

来自 JDK 的 null

Kotlin 的标准库可以或许很好地处理 null。然则如不雅你应用了 JDK 中的类,你须要本身处理关于 JDK 办法调用可能产生的空指针。

大年夜部分情况下 Kotlin 的标准库就足够了,然则有时你须要应用到 ConcurrentHashMap:

  1. val map = ConcurrentHashMap<String, String>() 
  2. map["foo"] = "bar" 
  3. val bar: String = map["foo"]!! 

你还可能会碰上更多更恐怖的问题。当你应用 JDK 类中的办法的时刻,返回值可能是null,并且没有什么像 Map 拜访一样的语法糖。

推敲如下例子:

  1. val queue: Queue<String> = LinkedList() 
  2. queue.peek().toInt() 
  1. /** 
  2.   * Retrieves, but does not remove, the head of this queue, 
  3.   * or returns {@code null} if this queue is empty. 
  4.   * 
  5.   * @return the head of this queue, or {@code null} if this queue is empty 
  6.   */ 
  7.   E peek(); 

文档中说 peek 办法会返回一个 E 类型的对象,然则 Kotlin 认为 E 是弗抽空的。在接下来的 Kotlin 版本中可能会解决这个问题,然则如今当你在你的工程中应用类似接口的时刻,必定要留意:

  1. val queue: Queue<String?> = LinkedList() 
  2. queue.peek()?.toInt() 

这对于 Java 妒攀来说是不友爱的,如不雅你想在 Java 中成功调用该办法,你须要定义如下接口:

内部 it

当一个 lambda 表达式只有一个参数的时刻,你可以在你的代码中将其省略,并用 it 代替。

  • it:单参数的内部名称。当你表达式只有一个参数的时刻,这是一个很有效的特点,声明的过程可以省略(就像 ->),并且参数名称为 it。

问题是,当你的代码中存在向下面例子一样的嵌套函数的时刻:

  1. val list = listOf("foo.bar"
     1/4    1 2 3 4 下一页 尾页

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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