🪧

【Android】@JvmOverloads について

2021/04/13に公開

@JvmOverloadsは、JavaからKotlinのデフォルト値を持つクラス、または、関数を呼び出せるようにするアノテーション です。

以下のGreeting#sayHelloを呼び出すと、Java でデフォルト値はサポートされていないため、コンパイルエラーになります。

NG

class Greeting {
    fun sayHello(prefix: String = "Mr.", name: String) {
        println("Hello, $prefix $name")
    }
}
public class JavaClass {
    public static void main(String[] args) {
        Greeting greeting = new Greeting();
        greeting.sayHello("Bob");
    }
}

Greeting#sayHello@JvmOverloadsを付与することで、Java からデフォルト値を持つ関数を呼び出せるようになります。

OK

class Greeting {
    @JvmOverloads
    fun sayHello(prefix: String = "Mr.", name: String) {
        println("Hello, $prefix $name")
    }
}
public class JavaClass {
    public static void main(String[] args) {
        Greeting greeting = new Greeting();
        greeting.sayHello("Bob");
    }
}

参考

Discussion