잡동사니

반응형

질문

 

Java 클래스 중 하나를 Kotlin으로 변환하고 클래스를 아래와 같이 변환합니다.

class MainApplication : Application() {
    companion object {
            operator fun get(context: Context): MainApplication {
                        return context.applicationContext as MainApplication
                                }
                                    }
                                    }

정적 함수 get 이 있습니다.

여전히 Java 기능에 액세스하고 있습니다.

MainApplication application = MainApplication.get(mContext);

MainApplication이 Java에있을 때 좋았습니다. 그러나 Kotlin의 MainApplication이 아닌 경우 위의 코드 오류

Error:(27, 54) error: cannot find symbol method get(Context)

위의 Java 코드에서 get 에 어떻게 액세스 할 수 있습니까?

 

답변1

 

@JvmStatic companion 객체의 메소드에 대한 주석으로 Kotlin에서 정적 메소드를 생성합니다.

class MainApplication : Application() {
    companion object {
            @JvmStatic fun get(context: Context): MainApplication {
                        return context.applicationContext as MainApplication
                                }
                                    }
                                    }

그런 다음 Kotlin으로 변환하기 전에 Java에서 액세스 할 수 있습니다.

MainApplication application = MainApplication.get(mContext);

편집 : 나는 최근에 배운 것을 추가해야한다고 생각합니다. @JvmStatic 은 메소드가 생성되는 위치에서 실제로 이동 하지 않습니다. companion 객체의 메소드 외에도 Java에 대한 정적 메소드를 생성하여 중복 합니다. 개인적으로 나는 이것이 훌륭하지 않다고 생각하고 유스 케이스에 따라 약간의 영향을 줄 수 있으므로 알아야 할 가치가 있습니다.

 

답변2

 

작전, 알았다 아래를 사용하십시오.

MainApplication application = MainApplication.Companion.get(mContext);

 

답변3

 

companion 객체의 이름을 생략하면 companion 이라는 이름을 사용하여 메소드에 액세스해야합니다.

예:

class MyClass1 {
    companion object Object1 {
            fun method1 {
                    }
                        }
                        }
                        
                        class MyClass2 {
                            companion object {
                                    fun method2 {
                                            }
                                                }
                                                }

첫 번째 companion 객체 메소드를 호출하려면 다음을 수행하십시오.

MyClass1.method1()

두 번째를 불러 오려면 :

MyClass2.Companion.method2()

자세한 내용은 companion 개체

 

답변4

 

new 키워드를 메서드 호출에 사용하면 Java에서 Companion 개체의 메서드에 액세스 할 수없는 문제가 발생할 수 있습니다. new 키워드는 생략해야합니다. 문서 상태 :

companion 개체 및 해당 멤버는 포함 클래스의 인스턴스가 아닌 포함 클래스 이름을 통해서만 액세스 할 수 있습니다.

따라서 다음과 같은 class가 있으면

class MyClass {
    companion object {
            fun create() {}
                }
                }

companion 객체의 메소드를 다음과 같이 호출 할 수 있습니다.

MyClass.create ()

그러나 이것처럼 :

new MyClass.create

 

 

 

 

 

출처 : https://stackoverflow.com/questions/38120494/how-to-access-kotlin-companion-object-in-java

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band