哈,沒想到你已經堅持不懈看到第三篇了,不錯哈~堅持就是勝利。
本文同步自博主的私人博客wing的地方酒館javascript
在上一篇文章中,咱們介紹了擴展函數,這裏對上一篇進行一點小小的補充。php
還記得textview是如何setText()的嗎java
textView.text = "hello kotlin"複製代碼
不知道你有沒有想過,這個.text是如何實現的呢。 哈哈,其實大家大概已經猜到了。就是經過擴展函數實現的android
public var TextView.text: CharSequence get() = getText()
set(v) = setText(v)複製代碼
今天介紹的是一種叫作數據類的類,他沒有什麼功能,只負責儲存數據,也就是咱們常說的Java Bean,一般,在Java語言裏,咱們定義一個實體,是這樣的git
public class User {
private String name;
private String id;
public User(String name, String id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}複製代碼
能夠看到,僅僅兩個屬性,加上getter setter有這麼多代碼。那麼kotlin是什麼樣子呢?github
data class User(var name: String, var id: String)複製代碼
你不要說我了個擦,這確實是所有代碼。。沒有少東西了。能夠看到語法,括號裏跟着參數,也是一種構造器。而且不用getter setter。ide
使用的時候正常使用就能夠了。函數
val user = User("wing","222")
user.id = "300"複製代碼
這裏提到一點,var 和val的區別。var通常是變量,val通常是常亮,即不可變量,也多用於只是用一次的變量。this
這裏你可能有疑問了,若是構造器是單參或者空參的呢? 語法以下:spa
class User {
var name: String? = null
var id: String? = null constructor(name: String) {
this.name = name
}
constructor(name: String, id: String) {
this.name = name
this.id = id
}
}複製代碼
接下來以一個點擊按鈕,傳遞數據類向下一個Activity爲栗子,把以前的知識應用一下。
首先,新建一個SecondActivity,提供一個靜態方法,用於Activity的轉跳。想必你們都知道這樣的好處,就是讓調用者沒必要看源碼就知道須要什麼參數。若是你按照java寫,就會發現沒有static這個關鍵字!不要慌,這裏可使用 伴生對象 來實現。伴生對象是伴隨這個類聲明週期的對象~下面看詳細用法。
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
toast(intent.getStringExtra(USER))
}
//建立一個伴生對象
companion object{
//extra的key
val USER = "USER"
fun startActivity(context: Context,user:User ){
val intent = Intent(context,SecondActivity::class.java)
intent.putExtra(USER,user)
context.startActivity(intent)
}
}
}複製代碼
在第一個Activity中,給按鈕設置監聽器,同時轉跳到第二個Activity而且傳遞User對象。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val user = User("name")
user.id = "100"
SecondActivity.startActivity(this,user)
}
}
}複製代碼
大功告成了!接下來運行下apk,看看第二個Activity成功接收到了傳遞的User(對了別忘了把User序列化).
對比一下,嗯哼?比Java少了多少? 有沒有很爽啊哈。
本文這就結束了(嫌文字過短?不要急啦,先去動手實踐下咯。。系列文章,既然挖了坑,就不會拖更的(吧..))
歡迎加入Kotlin小樂園羣:479109923
若是你是Android開發者,那麼你還能夠來 wing的酒館:425983695
來分享你的開發經驗哦