沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践!

写了多年的Java,直到看到Kotlin,本来代码可以如斯优雅!
如不雅你是像我一样是一名优良的Java开辟者^_^,并且已经想用kotlin来实现你的法度榜样,那么,抱歉!不要用Java的语法思维来写Kotlin,不要让kotlin的优雅湮没。如不雅你没有Java开辟经验,下面的内容也对你会有赞助。。。
1.尽可能的罕用 !!
小我感到对于Null的检查是Koltin最语法糖的器械了,强迫在编码过程中推敲空指针,是以《十亿美元的缺点》,也许你不会再有这个机会犯错了(也许可以说成,你赚了十亿美金^_^)。
起首须要介绍是!!操作符。
!! 操作符:这是为空指针爱好者预备的,非空断言运算符(!!)将任何值转换为非空类型,若该值为空则抛出异常。我们可以写 a!! ,这会返回一个非空的 a 值 (例如:在我们例子中的 String)或者如不雅 a 为空,就会抛出一个 空指针 异常:
- val b = a!!.length
所以,我们能不消!!操作符就不要用。。。
下面介绍几种方法避免应用!!操作符
1).多用 val 而不是 var
例:
在 Kotlin 中 val代表只读,var代表可变。建议尽可能多的应用val。val是线程安然的,并且必须在定义时初始化,所以不须要担心 null 的问题。只须要留意 val 在某些情况下也是可变的就行了。
val 和 var 是用于表示属性是否有 getter/setter:
- var:同时有 getter 和 setter
- val:只有 getter
所以,强烈推荐能用val的处所就用val。
2).应用 lateinit
依附倒转,对象的创建是经由过程spring完成的,而val请求定义的时刻初始化
查看Iterator.kt这个接口类,这个接口供给了hasNext()函数和next()函数。
- /**
- * Created by quanke on 2018/1/9.
- * Site:http://woquanke.com .
- */
- @RunWith(SpringRunner::class)
- @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
- class ApplicationTests {
- val log = LogFactory.getLog(ApplicationTests::class.java)!!
- @Autowired
- lateinit var restTemplate: TestRestTemplate
- @Test
- fun `GET when given quanke then returns "Hello, quanke"`() {
- // Given
- val name = "quanke"
- // When
- val body = restTemplate.getForObject("/users/hello/{name}", String::class.java, name)
- // Then
- assertThat(body).isEqualTo("Hello, $name")
- }
- }
留意:lateinit很好用,但也有坑
拜访未初始化的 lateinit 属性会导致 UninitializedPropertyAccessException。
lateinit 不支撑基本数据类型,比如 Int。对于基本数据类型,我们可以如许:
- > private var mNumber: Int by Delegates.notNull<Int>()
- >
推荐阅读
沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 在很多行业中都有很多看起来竽暌剐事理,用起往来交往不是那回事的误区,在主机中更是有不少,受愚钱是一方面,硬件和>>>详细阅读
本文标题:不要用Java的语法思维来写Kotlin
地址:http://www.17bianji.com/lsqh/40601.html
1/2 1