错误:类型不匹配:推断类型是字符串?但布尔值是预期的

Posted

技术标签:

【中文标题】错误:类型不匹配:推断类型是字符串?但布尔值是预期的【英文标题】:error: type mismatch: inferred type is String? but Boolean was expected 【发布时间】:2021-08-01 17:36:06 【问题描述】:

我正在尝试传递一个字符串类型的参数?到一个需要布尔类型的函数,但我不确定如何使它工作,因为如果字符串?为空,应为假,否则为真。

这是代码:

data class House(
    var article: Article,
    var totalTime: Calendar)

    val totalTime: Long
        get() = (Calendar.getInstance().timeInMillis - totalTime.timeInMillis) / MIN_IN_MILISEC

    fun takeArticleOut(artCode:String)

        fun onSuccess(finalPrice:Int):String
            val finalPrice = getTime(vehicleType = article.articleType,
                totalTime = article.totalTime.toInt(), hasCard = article.articleCard)

            return "Price is $finalPrice."
        
    

    fun getTime(articleType: ArticleType, totalTime:Int, articleCard:Boolean): Int 
        var finalPrice = 20
        if (totalTime > 30) 
            finalPrice += ((totalTime - 30) / 15) * 10
        
        return finalPrice
    

    if(hasDiscountCard)
                val discount = (finalPrice * 15) / 100
                finalPrice = finalPrice - discount
                return finalPrice
            

            return finalPrice

        

data class Article(val artCode: String,
                   var articleType: ArticleType,
                   var totalTime: Calendar,
                   var articleCard:String?=" ")

    val totalTime: Long
        get() = (Calendar.getInstance().timeInMillis - checkInTime.timeInMillis) / 60000 //minutes in milliseconds

错误来自这部分,hasCard因为article.articleCard是一个字符串?我需要一个布尔值。如何以有效的方式传递参数?

fun onSuccess(finalPrice:Int):String
            val finalPrice = getTime(articleType = article.articleType,
                totalTime = article.totalTime.toInt(), hasCard = article.articleCard)

            return "Price is $finalPrice."
        

【问题讨论】:

“我怎样才能以一种有效的方式传递参数?” - 这取决于你希望它如何工作?如果你有卡,hasCard 参数应该为 true,如果没有,则为 false,但如何确定取决于你的逻辑。也许articleCard 为空意味着您没有卡?如果是这样,您将通过 [.].articleCard != null 等。 【参考方案1】:

您需要将String? 转换为Boolean。如果您需要的是:

空 -> 假 "" -> 错误 非空字符串值 -> true

那么最简单的就是使用isNullOrEmpty()

hasCard = !article.articleCard.isNullOrEmpty()

【讨论】:

以上是关于错误:类型不匹配:推断类型是字符串?但布尔值是预期的的主要内容,如果未能解决你的问题,请参考以下文章

错误:类型不匹配:推断类型为单位,但应为布尔值

Kotlin:类型不匹配:推断类型是 Intent?但意图是预期的

类型不匹配:推断类型为 Unit 但预期为 Boolean

Kotlin 类型不匹配:推断类型是 View!但 TextView 是预期的

获取类型不匹配:推断类型为 List 但应为 Collection

kotlin gradle dsl问题:类型不匹配:推断类型是字符串但URI!预计