@JvmOverloadsとは

1 min read読了の目安(約1200字

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

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

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();
	// prefixを引数に渡していないのでエラーになる。
        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");
    }
}

参考