gpt4 book ai didi

generics - Kotlin 泛型更改返回类型

转载 作者:行者123 更新时间:2023-12-02 13:09:28 24 4
gpt4 key购买 nike

我在 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 片段:
fun <T : CharSequence> nullIfEmpty(t: T?): T? {
return if (TextUtils.isEmpty(t)) null else t
}

Java 不再编译时提示参数类型不匹配 - 使用 CharSequence 调用函数当它期望 String .

解决此问题的正确语法是什么?

最佳答案

如果您使用的是 Java 8(或更高版本,我想),那么此代码实际上会像您所展示的那样工作。

在早期版本中(我假设您使用的是 Android?),类型推断较弱,您必须明确指定泛型类型才能使其工作,如下所示:

String foo = "   ";
doSomething(K.<String>nullIfEmpty(foo));

(我已将 Kotlin 函数包装在一个名为 K 的对象中,并使用该限定符调用它,以便可以将类型参数放置在 Java 调用站点。我认为您不能提供类型参数静态导入。)

旁注:注意这是 TextUtils.isEmpty() 的实现,所以它不会返回 true对于像 " " 这样的字符串.
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(@Nullable CharSequence str) {
return str == null || str.length() == 0;
}

关于generics - Kotlin 泛型更改返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48504361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com