【发布时间】:2018-01-29 15:10:49
【问题描述】:
我在 Java 中有这个方法我想转换为 Kotlin,但仍然在 Java 和 Kotlin 中使用:
@Nullable
public static <T extends CharSequence> T nullIfEmpty(@Nullable final T t) {
return TextUtils.isEmpty(t) ? null : t;
}
在另一个地方我有一个接受字符串的方法:
public static doSomething(@Nullable String foo) {}
我这样称呼:
String foo = "";
doSomething(nullIfEmpty(foo)); // == doSomething(null); since foo is empty
在我将nullIfEmpty() 转换为这个 Kotlin sn-p 之后:
fun <T : CharSequence> nullIfEmpty(t: T?): T? {
return if (TextUtils.isEmpty(t)) null else t
}
Java 不再编译时抱怨参数类型不匹配 - 当它需要 String 时使用 CharSequence 调用函数。
解决这个问题的正确语法是什么?
【问题讨论】:
-
顺便说一句,你可以重写
nullIfEmpty函数如下:fun <T : CharSequence> nullIfEmpty(t: T?): T? = t.takeUnless { it.isNullOrEmpty() }