코 틀린 연관된 오브젝트 (자바 고정 부재)

1. 개념

객체 선언 플러스 앞에서 동반자 키워드 연관된 객체를 생성합니다. 의 역할은 클래스 위치를 외부에 있습니다 아날로그 정적 멤버 .

구문 : (ObjectName를 생략 할 수 있음)

companion object ObjectName : [0~N个父类型] {
    //伴生对象类体
}

2. 특징

  • 각 클래스는 동반자까지 개체를 정의;
  • 관련 대상 에 해당 클래스 외부 개체, 당신은 외부 클래스 이름과 관련된 개체의 회원들에 의해 직접 액세스 할 수 있습니다;
  • 코 틀린는 오브젝트와 연관된 정적 키워드를 취소하기 때문에 정적 키워드 정적 멤버 수정 코 틀린의 부족을 만회하지 않는 것입니다;
  • 동반자 객체는 대상의 정적 멤버하지만 동반자 오브젝트 회원 아직도 그 외부 클래스의 멤버에 관련된 개체 자체의 구성원입니다 시뮬레이션이된다.

3. 관련 객체를 정의


fun main() {
    println(OuterClass.name)//伴生对象属性
    OuterClass.companionFun()//调用伴生对象方法
    OuterClass.CompanionObjectName//通过伴生对象名称获取伴生对象本身
}

class OuterClass {
    companion object CompanionObjectName {
        val name = "伴生对象属性"
        fun companionFun() {
            println("调用伴生对象方法")
        }
    }
}

4. 오브젝트의 이름을 생략 컴패니언

당신이 연관된 객체 자체를 얻으려면 객체 이름을 생략 할 수 동반자, 연관된 객체 이름이 생략되고, 동반자 얻을 수 있습니다.

fun main() {
    println(OuterClass.name)//伴生对象属性
    OuterClass.companionFun()//调用伴生对象方法
    OuterClass.Companion//通过Companion获取伴生对象本身
}

class OuterClass {
    companion object {
        val name = "伴生对象属性"
        fun companionFun() {
            println("调用伴生对象方法")
        }
    }
}

5. 동반자 객체 연장 부재

객체가 이름과 관련된 경우 객체는 "을 통해, 연장 부재 연관되어 객체 관련 회원의 외부 클래스 이름 .. "확장하는 방법;

객체 "를 통해, 이름이 연결되지 않은 경우 외부 클래스 .Companion.의 회원 "방법 확장

fun main() {
    println(OuterClass.name)//伴生对象属性
    OuterClass.companionFun()//调用伴生对象方法

    println(OuterClass.extraParam)//为伴生对象扩展属性
    OuterClass.test()//为伴生对象扩展方法
}

class OuterClass {
    companion object {
        val name = "伴生对象属性"
        fun companionFun() {
            println("调用伴生对象方法")
        }
    }
}

/**
 * 为伴生对象扩展方法
 */
fun OuterClass.Companion.test() {
    println("为伴生对象扩展方法")
}

/**
 * 为伴生对象扩展属性
 */
val OuterClass.Companion.extraParam: String
    get() = "为伴生对象扩展属性"

추천

출처www.cnblogs.com/nicolas2019/p/10960407.html