如果主题不为空,如何判断扩展方法 returns 为非空
How to tell that an extension method returns non-null if subject is not null
我实现了以下方法:
private fun String?.replaceHolder(item: String): String? {
return this?.replace("$deployUnit", item)
}
使用它的代码如下所示:
val a = "aaa".replaceHolder("fff")
然而,a的推断类型是String?
。
对于合同,我可以说,如果 return 值不为 null,那么 subject was 就不是 null,就像这样:
@ExperimentalContracts
private fun String?.replaceHolder(item: String): String? {
contract {
returnsNotNull() implies (this@replaceHolder != null)
}
return this?.replace("$deployUnit", item)
}
反话可以吗?我的意思是推断 a
的类型不为空?还有其他方法吗?
如果我很了解你,这就是你想要的
private fun <T: String?> T.replaceHolder(item: String): T {
return this?.replace("$deployUnit", item) as T
}
T 扩展字符串?意味着 T 类型可以是 String 或 null 或两者都是,并且每个类型 T 都是函数 return 该类型也是
我实现了以下方法:
private fun String?.replaceHolder(item: String): String? {
return this?.replace("$deployUnit", item)
}
使用它的代码如下所示:
val a = "aaa".replaceHolder("fff")
然而,a的推断类型是String?
。
对于合同,我可以说,如果 return 值不为 null,那么 subject was 就不是 null,就像这样:
@ExperimentalContracts
private fun String?.replaceHolder(item: String): String? {
contract {
returnsNotNull() implies (this@replaceHolder != null)
}
return this?.replace("$deployUnit", item)
}
反话可以吗?我的意思是推断 a
的类型不为空?还有其他方法吗?
如果我很了解你,这就是你想要的
private fun <T: String?> T.replaceHolder(item: String): T {
return this?.replace("$deployUnit", item) as T
}
T 扩展字符串?意味着 T 类型可以是 String 或 null 或两者都是,并且每个类型 T 都是函数 return 该类型也是