来自java的kotlin函数默认参数

mhs*_*ams 25 kotlin

给予以下Kotlin类:

class Foo {
   public fun bar(i: Int = 0): Int = 2 * i
}
Run Code Online (Sandbox Code Playgroud)

如何在没有java/groovy代码的任何参数的情况下调用'bar'函数?

def f = new Foo()
f.bar() //throws:  java.lang.IllegalArgumentException: Parameter specified as non-null contains null
Run Code Online (Sandbox Code Playgroud)

Jay*_*ard 53

你现在可以在Kotlin做到这一点.对于您的类方法,请使用@JvmOverloads注释.

class Foo {
    @JvmOverloads public fun bar(name: String = "World"): String = "Hello $name!"
}
Run Code Online (Sandbox Code Playgroud)

现在只需从Java调用它:

Foo foo = new Foo();
System.out.println(foo.bar());
System.out.println(foo.bar("Frank"));
Run Code Online (Sandbox Code Playgroud)

输出以下内容:

你好,世界!

你好弗兰克!

  • 在使用@JvmOverloads时,请记住以下内容:1.使用父类/接口的默认参数以及子实现.无需使重写方法中的参数接受默认参数.默认情况下,它们用于所有Kotlin用法.2. JvmOverloads不能用于接口方法.导致编译错误.3.如果覆盖接受默认参数的方法并使参数默认 - 导致编译错误.他们已经接受了Kotlin使用的默认参数.4.不能在重写方法上使用JvmOverloads - 签名冲突. (3认同)