我已经实现了以下方法:
private fun String?.replaceHolder(item: String): String? {
return this?.replace("\$deployUnit", item)
}
正在使用它的代码如下:
val a = "aaa".replaceHolder("fff")
但是,a的推断类型为String?
。
对于合同,我可以说,如果返回值不为null,则subject也不为null:
@ExperimentalContracts
private fun String?.replaceHolder(item: String): String? {
contract {
returnsNotNull() implies (this@replaceHolder != null)
}
return this?.replace("\$deployUnit", item)
}
可以说相反吗?我的意思是推断a
的类型不为null?还有另一种方法吗?
答案 0 :(得分:4)
如果我很了解您,这就是您想要的
private fun <T: String?> T.replaceHolder(item: String): T {
return this?.replace("\$deployUnit", item) as T
}
T扩展字符串?表示T类型可以是String或null或两者都可以,并且每个T类型都是,函数也返回该类型