kotlin安卓笔记

相对于 java 的优点

  1. 减少使用方法
    1. 重载等于号覆盖了原先的getter和setter,省得自行定义
    2. 一部分全局变量代替了java中需要用函数获取的对象
      1. 比如application, intent, packageManager等等
  2. 减少构造对象
    1. 直接使用xml中的id作为对象名
    2. 大量使用匿名的函数lambda表达式来构造最终对象,而不是使用新的对象
      1. 甚至许多对象可能需要重写多个方法才能初始化但用户可能只想重写一个
  3. 简洁的表达
    1. 字符串模板
    2. JSON友好
  4. 更加简洁和统一的API
    1. 代表例子toInt(),toIntOrNull()
  5. 安全方面的提升
    1. 多使用 !!?,程序看起来更健壮

抛弃了许多java中固有的思维,比如

  1. private的成员,public的getter和setter
  2. 使用一堆对象构造新的对象 a.setB(new B(@override void xxx(){…}))

volly 网络请求

代表性地表达了kotlin相对java的优点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
internal inner class LoginHandle : Runnable {

override fun run() {
val connectUrl = "api/v1/users/sign_in.json"
val requestQueue = Volley.newRequestQueue(this@LoginActivity)

// 没有使用java的new Response.Listener<JSONObject> {@override public void onResponse()}
val listener = Response.Listener<JSONObject> { response ->
try {
// 此处没有使用java的thisApp.setLoginUserId(response.getInt("id"))
thisApp!!.loginUserId = response.getInt("id")
thisApp!!.loginUserName = response.getString("name") + " さん"
startActivity<MainActivity>()
} catch (e: JSONException) {
e.printStackTrace()
toast(R.string.error_incorrect_email_password)
}

}

val errorListener = Response.ErrorListener { error ->
val tag = "LOGIN"
Log.e(tag, error.message, error)
toast(R.string.error_incorrect_email_password)
}

// 此处使用了字符串模板,不用再写加号破坏美感
// 同时也提供了更方便的json对象生成方式,开发者可以直接使用字符串
val dataToPost = JSONObject(
"""
{
"user": {
"uid":"${et_username!!.text}",
"password":"${et_password!!.text}"
}
}
""".trimIndent()
)

val crJsonObjectRequest = CrJsonObjectRequest(
Request.Method.POST,
connectUrl,
dataToPost,
listener,
errorListener,
false
)

requestQueue.add(crJsonObjectRequest)
}
}

真的能完全不使用java库吗

  1. 目前在日期方面还是使用了java的一些实现,可能kotlin不想再造轮子