자바에서 코틀린 호출

프로퍼티

코틀린

var firstName: String

자바

private String firstName;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

패키지 레벨 함수

코틀린

// app.kt
package org.example

class Util

fun getTime() {}

자바에서 호출할 때

new org.example.Util();
org.example.AppKt.getTime();

코틀린

@file:JvmName("DemoUtils")

package org.example

class Util

fun getTime() { /*...*/ }

자바에서 호출

new org.example.Util();
org.example.DemoUtils.getTime();

인스턴스 필드

코틀린

class User(id: String) {
    @JvmField val ID = id
}

자바에서 호출

class JavaClient {
    public String getID(User user) {
        return user.ID;
    }
}

정적 필드

@JvmField 애노테이션이 붙은 경우

코틀린

class Key(val value: Int) {
    companion object {
        @JvmField
        val COMPARATOR: Comparator<Key> = compareBy<Key> { it.value }
    }
}

자바에서 호출

Key.COMPARATOR.compare(key1, key2);
// public static final field in Key class

lateinit 변경자가 붙은 경우

코틀린

object Singleton {
    lateinit var provider: Provider
}

자바에서 호출

Singleton.provider = new Provider();
// public static non-final field in Singleton class

const 변경자가 붙은 경우

코틀린

// file example.kt

object Obj {
    const val CONST = 1
}

class C {
    companion object {
        const val VERSION = 9
    }
}

const val MAX = 239

자바에서 호출

int const = Obj.CONST;
int version = C.VERSION;
int max = ExampleKt.MAX;

정적 메소드

코틀린

class C {
    
    companion object {
        @JvmStatic 
        fun callStatic() {}
        
        fun callNonStatic() {}
    }
}

자바에서 호출

C.callStatic(); // works fine
C.callNonStatic(); // error: not a static method
C.Companion.callStatic(); // instance method remains
C.Companion.callNonStatic(); // the only way it works

코틀린

object Obj {

    @JvmStatic 
    fun callStatic() {}
    
    fun callNonStatic() {}
}

자바에서 호출

Obj.callStatic(); // works fine
Obj.callNonStatic(); // error
Obj.INSTANCE.callNonStatic(); // works, a call through the singleton instance
Obj.INSTANCE.callStatic(); // works too

Reference