Kotlin学习笔记(六) 伴生对象 对象表达式
生活随笔
收集整理的這篇文章主要介紹了
Kotlin学习笔记(六) 伴生对象 对象表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
一,伴生對象
1.類似于java中的靜態方法static
class TestCompanion{//伴生對象使用companion object定義companion object {fun doTest(){}} }//kotlin調用 fun main(args: Array<String>) {//2種方式//直接通過類名點Companion去點要調用的方法TestCompanion.Companion.doTest()//直接通過類名去點要調用的方法TestCompanion.doTest() }//kotlin和java是100%兼容,在Java中調用 public class TestCompanionJava {public static void main(String[] args) {TestCompanion.Companion.doTest();} }? ? ? ?在java中調用可見加了一個Companion,但是假設我們在開發是由java轉kotlin項目肯定是一點一點的去動代碼,那么這里就涉及到靜態方法改成kotlin但是調用還是java,怎么辦呢?
class TestCompanion{//伴生對象使用companion object定義companion object {//使用該注解,在java中就可以直接類名調用@JvmStaticfun doTest(){}} } //JAVA調用 public class TestCompanionJava {public static void main(String[] args) {TestCompanion.doTest();} }2.實現接口
class TestCompanion{//伴生對象使用companion object定義//實現一個接口companion object :InterfaceCompanion {override fun inter() {println("伴生對象") }} } /*** 有兩種方法調用方法*/ fun main(args: Array<String>) {//1.直接調用方法名TestCompanion.inter()//2.實例化伴生對象,再通過對象調用方法名val companion = TestCompanion.Companioncompanion.inter()//在這里我們測試一下實例val companion2 = TestCompanion.Companionprintln(companion)println(companion2) }輸出: 伴生對象 伴生對象 river.service.TestCompanion$Companion@16b98e56 river.service.TestCompanion$Companion@16b98e56//可見兩次實例的物理地址是一樣的,說明是同一個實例對象這種實現接口的伴生對象有什么意義呢?
? ? ? 個人粗淺理解,作為外層類的成員變量,又作為該接口的一個實現類的實例,若只有這一個地方需要使用到這樣實現的子類,或者只在此處需要這樣定制化的子類,則可以寫成這種,類似于匿名內部類的樣子,我們不需要知道這個子類是什么,只需要知道他的特性即可;
二.對象表達式
Kotlin 用對象表達式和對象聲明來實現創建一個對某個類做了輕微改動的類的對象,且不需要去聲明一個新的子類。
/*** 對象表達式用法* 通過對象表達式實現一個匿名內部類的對象用于方法的參數中:*/ class TestCompanion{//對象表達式實現接口var param = object : InterfaceCompanion{override fun inter() {TODO("not implemented") //To change body of created functions use File | Settings | File Templates.}}//對象表達式繼承抽象類var param2 = object : AbstractObject() {override fun abMethod(): String {TODO("not implemented") //To change body of created functions use File | Settings | File Templates.}}} /*** 有兩種方法調用方法*/ fun main(args: Array<String>) {val testCompanion = TestCompanion()println(testCompanion.param2.name)}輸出 : name //上面例子用到的接口和抽象類 //1.接口 interface InterfaceCompanion{fun inter() }//2.抽象類 abstract class AbstractObject{var name :String = "name"abstract fun abMethod():String }? ? ? ?對象表達式的用途,當需要一個對某個類輕微改動后的實例時,又不需要顯式的聲明此改動后的類,因為用到的地方可能僅此一處,使用對象表達式可以更加簡潔;減少了不必要的類,避免類膨脹;
轉載于:https://my.oschina.net/JackieRiver/blog/1825819
總結
以上是生活随笔為你收集整理的Kotlin学习笔记(六) 伴生对象 对象表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pptm指的是什么格式
- 下一篇: 手把手教你撸一个简易的 webpack