【Kotlin 与 Java 互操作】Java中调用带有默认值的Kotlin函数(十四)

1.0.1 Java 没有默认参数值的概念

  1. 因此当从 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 来简化调用

  1. 如果经常需要从 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()
}
  1. @JvmOverloads将指示 Kotlin 编译器为该函数生成多个重载函数
    • 生成规则是:从最后一个参数开始, 逐个省略每个具有默认值的参数
    • <1> 这意味着会产生以下重载函数
      1. 对于签名中省略的参数, 每个重载会使用其对应的默认值
    • <2> 这里Java并没有指定所有参数值
      1. 而是调用最后一个重载方法
===============================/* 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>
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值