object EightyFourActivity {
/**
*
* 每天一個(gè)知識(shí)點(diǎn)day84 TODO Kotlin object 和 companion object
* http://www.reibang.com/p/a8d1877143b2
* http://www.reibang.com/p/14db81e1576a
* object
* object聲明不能用在方法和inner內(nèi)部類中酱固,但是能嵌套在其他object聲明和嵌套類中柿祈。
* object表達(dá)式是在使用的地方立即被初始化和執(zhí)行的,
* 因此object不能有定義構(gòu)造函數(shù),
*
*
* kotlin中object關(guān)鍵字可以表示兩種含義
* 1.對(duì)象表達(dá)式
* 匿名內(nèi)部類的寫法
* textView.setOnClickListener(object : OnClickListener {
* override fun onClick(p0: View?) {
* Toast.makeText(this@TestActivity, "點(diǎn)擊事件生效", Toast.LENGTH_LONG)}})
*
* 2.對(duì)象聲明
* 用object修飾的類為靜態(tài)類烘贴,里面的方法和變量都是靜態(tài)的羡儿。
* 直接聲明類
* object ObjTest{
* fun getA(){}
* }
* 靜態(tài)內(nèi)部類
* class Test{
* object InnerClass{
*
* }
* }
* 沒有被inner 修飾的內(nèi)部類都是靜態(tài)的
* 如果需要在java中調(diào)用ObjTest的getA方法就是ObjectTest.INSTANCE.getA()
*
*
* companion object
* companion object修飾為伴生對(duì)象,伴生對(duì)象在類中只能存在一個(gè)早像,可以給伴生
* 對(duì)象起個(gè)名字來調(diào)用僻肖,否則就直接用Companion調(diào)用
* companion object里面調(diào)用不到外部的成員變量,因?yàn)閏ompanion object相當(dāng)于靜態(tài)類
* class ComClass{
* companion object{
* fun getObj(){}
* }
* }
* 在java中調(diào)用為ComClass.Companion.getObj()
* class ComClass{
* companion object AAB{
* fun getObj(){}
* }
* 在java中調(diào)用為ComClass.AAB.getObj()
*
* 總結(jié):
* 1.object表達(dá)式是在使用的地方立即被初始化和執(zhí)行的卢鹦。
* 2.object聲明一個(gè)類是延遲加載臀脏,只有當(dāng)?shù)谝淮伪辉L問的時(shí)候才會(huì)初始化,
* 所以用來實(shí)現(xiàn)單例冀自,
* 3.companion object是當(dāng)包含他的類被加載時(shí)就初始化了揉稚,這點(diǎn)和java的static還是一樣的。
* 官方并不建議我們?yōu)E用object關(guān)鍵字熬粗,因?yàn)樗焕诳刂埔膊灰子跍y(cè)試搀玖,畢竟他會(huì)在聲明時(shí)就
* 初始化,一般情況下我們使用object就是匿名內(nèi)部類和單例驻呐,而companion object一般用來
* 聲明靜態(tài)域灌诅。
*
*
*/
@JvmStatic
fun getObj() {
ComObjClass.OBJCC.get()
}
val objA: String? = null
}
class ComObjClass {
val tv: TextView? = null
fun ss() {
tv.let {
}
}
companion object {
val c: String = "-----"
const val cc:String = "----"
@JvmStatic
val mComObj: String? = null
fun getc(){
c.toString()
}
}
val objB: String? = null
object OBJCC {
fun get() {
}
}
}
class StaticDemoActivity {
companion object {
const val LOAN_TYPE = "loanType"
const val LOAN_TITLE = "loanTitle"
}
object A{
}
inner class SCS{
}
}