【Kotlin 与 Java 互操作】Java中调用带有默认值的Kotlin函数(十四)
1.0.1 Java 没有默认参数值的概念
- 因此当从 Java 调用带有默认参数值的 Kotlin 函数时
1. 必须明确指定所有参数值
fun <T> joinToString(
collection: Collection<T>,
separator: String = ", ",
prefix: String = "",
postfix: String = ""
) : String {
val result = StringBuilder(prefix)
for ((index, elem) in collection.withIndex()){
if (index > 0) result.append(separator)
result.append(elem)
}
result.append(postfix)
return result.toString()
}
==============================================================
import java.util.List;
public class Example {
public static void main(String[] args) {
System.out.println(joinToString(List.of("1", "2"), ", ", "", "")); // <1>
}
}
1.0.2 使用 @JvmOverloads 来简化调用
- 如果经常需要从 Java 调用该函数,并希望让Java调用者更容易使用该函数
- 可以使用 @JvmOverloads 注解该函数
@JvmOverloads
fun <T> joinToString(
collection: Collection<T>,
separator: String = ", ",
prefix: String = "",
postfix: String = ""
) : String {
val result = StringBuilder(prefix)
for ((index, elem) in collection.withIndex()){
if (index > 0) result.append(separator)
result.append(elem)
}
result.append(postfix)
return result.toString()
}
- @JvmOverloads将指示 Kotlin 编译器为该函数生成多个重载函数
- 生成规则是:从最后一个参数开始, 逐个省略每个具有默认值的参数
- <1> 这意味着会产生以下重载函数
- 对于签名中省略的参数, 每个重载会使用其对应的默认值
- <2> 这里Java并没有指定所有参数值
- 而是调用最后一个重载方法
===============================/* Java */ <1>
String joinToString(Collection<T> collection, String separator, String prefix, String postfix);
String joinToString(Collection<T> collection, String separator, String prefix);
String joinToString(Collection<T> collection, String separator);
String joinToString(Collection<T> collection); // <2>
================================= Java调用代码
import java.util.List;
public class Example {
public static void main(String[] args) {
System.out.println(joinToString(List.of("1", "2"))); // <2>
}
}
原文地址:https://blog.csdn.net/qq_36154755/article/details/142408438
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!