根据intellij和gradle,此变量a
类型为Deferred<{Comparable & java.io.Serializable}>
:
val a = async(IO) { possibleIdDeferred.await()?.also { repo.findAttrById(it) } ?: run { "" } }
其中possibleIdDeferred
是Deferred<Long?>
,这是回购函数:
@Cacheable("someCacheName")
suspend fun findAttrById(id: Long) = entityRepo.findById(id)!!.someAttr
其中entityRepo
声明是
@Repository
interface EntityRepo : CoroutineCrudRepository<Entity, Long> {
suspend fun findByAttr(attr: String): Entity?
}
如果我在这里添加as String
:
val a = async(IO) { possibleIdDeferred.await()?.also { repo.findAttrById(it) as String} ?: run { "" as String} }
我得到[USELESS_CAST] No cast needed
。如果我尝试a.await() as String
,我会得到[CAST_NEVER_SUCCEEDS] This cast can never succeed
。我应该更改什么以使变量a
类型为String?
由于also
返回自己的上下文,我有
val a = someNullableInt ?: emptyString
导致了这个奇怪类型的问题标题。我修复了将also
更改为let
的问题,因为我真正想要返回的是最后一条语句