java返回参数处理不返回null,如果参数不为null,如何告诉kotlin函数不返回null?...

我想编写一个便利扩展来从Map中提取值,同时解析它们 . 如果解析失败,则该函数应返回默认值 . 这一切都很好,但我想告诉Kotlin编译器,当默认值不为null时,结果也不会为null . 我可以通过 @Contract 注释在Java中使用它,但它似乎在Kotlin中不起作用 . 可以这样做吗? Contract 不适用于扩展功能吗?这是kotlin的尝试:

import org.jetbrains.annotations.Contract

private const val TAG = "ParseExtensions"

@Contract("_, !null -> !null")

fun Map.optLong(key: String, default: Long?): Long? {

val value = get(key)

value ?: return default

return try {

java.lang.Long.valueOf(value)

} catch (e: NumberFormatException) {

Log.e(TAG, e)

Log.d(TAG, "Couldn't convert $value to long for key $key")

default

}

}

fun test() {

val a = HashMap()

val something: Long = a.optLong("somekey", 1)

}

在上面的代码中,IDE将突出显示 something 赋值中的错误,尽管使用非null默认值1调用 optLong . 为了进行比较,这里是类似的代码,它通过Java中的注释和 Contract 测试可空性:

public class StackoverflowQuestion

{

@Contract("_, !null -> !null")

static @Nullable Long getLong(@NonNull String key, @Nullable Long def)

{

// Just for testing, no real code here.

return 0L;

}

static void testNull(@NonNull Long value) {

}

static void test()

{

final Long something = getLong("somekey", 1L);

testNull(something);

}

}

上面的代码没有显示任何错误 . 仅当删除了 @Contract 注释时,IDE才会警告对 testNull() 的调用可能为空值 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值