最近开始使用kotlin写项目了,这几天一直对object,companion object,内部类和inner class搞得有点迷糊 现在抽空,理清一下他们之间区别 我定义了一个class A 然后再class A内部分别定义了class B,object C,companion object D,inner class E四中不同的类
println("I'm in inner class") } } } fun main(args: Array<String>) { ObjectOuter.Inner.method() } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 2. 伴生对象(Companion object) 在阐述伴生对象之前,首先我们要明确一点:在Kotlin中是没有static关键字的,也就是意味着没有了静态方法和静态成员。那么...
通过companion object声明伴生对象,必须写在一个类的内部,作为该类的伴生对象,编译器编译时会在该类中生成一个静态的Companion对象,然后调用该静态对象的成员。伴生对象中的属性和方法可以理解为Java中的静态变量和静态方法,可以直接通过类名.属性/方法调用,如果是Java类中调用时通过类名.Companion.属性/方法调用 class...
classCompanionOuter{companionobjectCompanionInner{funcompanionPrint(){println("companionPrint")}}} 其中,伴生对象名(CompanionInner)可以被省略,此时该伴生对象会被赋予一个默认的名字Companion。 3.2 使用方法 可以使用外部类名直接调用伴生对象的函数,其中内部伴生对象名可以被忽略。另外,外部函数名可以直接用于表示其...
println("I'm in inner class") } } } fun main(args: Array<String>) { ObjectOuter.Inner.method() } 2. 伴生对象(Companion object) 在阐述伴生对象之前,首先我们要明确一点:在Kotlin中是没有static关键字的,也就是意味着没有了静态方法和静态成员。那么在kotlin中如果要想表示这种概念,取而代之的是包...
Kotlin 的类和接口在概念上跟 Java 是一样的,但是用法存在一些差别,比如继承的写法、构造函数和可见性修饰符的不同等,此外还有一些 Java 中没有的概念,如数据类、密封类、委托和 object 关键字等。下面从类和接口的定义开始,感受一下 Kotlin 的非凡之处吧!
object DemoManager {privatevalTAG="DemoManager"funa(){ Log.e(TAG,"此时 object 表示 声明静态内部类") } } 2.2 声明静态内部类 类内部的对象声明,没有被inner修饰的内部类都是静态的 classDemoManager{ object MyObject {funa(){ Log.e(TAG,"此时 object 表示 直接声明类") ...
class Person1 { lateinit var name: String // lateinit 关键字表示该属性延迟初始化 var age: Int = 0 // lateinit 关键字不能修饰 primitive 类型 lateinit var sex: String override fun toString(): String { return "Person1(name='$name', age=$age, sex='$sex')" ...
inner class Inner { fun foo() = bar } } val demo = Outer().Inner().foo() // == 1 ``` 内部类是可以使用外部类的属性个方法,内部类的this默认指向内部类自己,可以使用带有限定符的this来指向外部类,比如上面的代码可以使用this@Outer来指向外部类 ...
class Person { // 改动在这里 // ↓ companion object InnerSingleton { @JvmStatic fun foo() {} } } 实现工厂模式: User.create("Tome") // 私有的构造函数,外部无法调用 // ↓ class User private constructor(name: String) { companion object { @JvmStatic fun create(name: String): User? {...