给定以下Kotlin类:

class Foo {
   public fun bar(i: Int = 0): Int = 2 * i
}

如果没有java/groovy代码中的任何参数,我应该如何调用‘bar’函数?

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

推荐答案

You can do this now in Kotlin. For your class method, use the @JvmOverloads annotation.

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

现在只需从Java调用它:

Foo foo = new Foo();
System.out.println(foo.bar());
System.out.println(foo.bar("Frank"));

Outputs the following:

你好,世界!

Hello Frank!

Kotlin相关问答推荐

了解Kotlin函数

Spring Boot Bean验证器未触发

如何编写带有依赖项的自定义Kotlin串行化程序?

Kotlin中是否可以混合使用推断和显式的通用类型参数?

Kotlin 可空泛型

如何处理基于枚举提前返回的 forEach 循环,Kotlin 中的一条路径除外

如何使用 Findbugs 避免 kotlin 文件

参考 Kotlin 中的 Java 接口静态字段

如何修复 ViewPager2 中的Design assumption violated错误?

作为 Kotlin 中的函数的结果,如何从 Firestore 数据库返回列表?

@uncheckedVariance 在 Kotlin 中?

将多个 Kotlin 流合并到一个列表中,而无需等待第一个值

Kotlin:使用Gradle进行增量编译

如何暂停kotlin coroutine直到收到通知

Kotlin 的 Double.toInt() 中使用了哪种方法,舍入还是截断?

空对象引用上的 TransitionSet ArrayList.size()

Android Jetpack导航,另一个主机片段中的主机片段

Gradle:无法连接到 Windows 上的 Kotlin 守护程序

Kotlin 与 C# 中的标志枚举变量具有相似效果的方式是什么

从另一个列表创建一个列表