我正在使用返回true false的方法(例如方法containsKey of MutableList)。由于函数是用java写的,Kotlin把返回类型称为Boolean?这就是我得到一个编译错误的原因:“必需:布尔,发现:布尔?”.我必须说在某些情况下(不知道为什么)使用这个方法是可以的,有时它会返回上面的错误。有人能猜到是什么原因吗?
我的代码:
val gamesPerCountriesMap = mutableMapOf<String,MutableMap<Long, List<AllScoresGameObj>>>()
if (countryName != null && countryName != "" && !gamesPerCountriesMap.containsKey(countryName))
{
gamesPerCountriesMap.put(countryName, mutableMapOf<Long,List<AllScoresGameObj>>())
}
if (!gamesPerCountriesMap.get(countryName)?.containsKey(competitionId))
{
gamesPerCountriesMap.get(countryName)?.put(competitionId, listOf<AllScoresGameObj>())
}
如果编译了第一个,则第二个会出错:
布尔类型的可空接收器上只允许安全(?.)或非空断言(!!.)调用?
如果我拿掉!在第二个假设的开始,我会出现不同的错误:
类型不匹配:推断的类型是布尔型?但布尔是意料之中的
读完所有的建议后,我写了下面的代码:
gamesPerCountriesMap.get(countryName)?.let {
if (!gamesPerCountriesMap.containsKey(it))
{
gamesPerCountriesMap.get(countryName)?.put(competitionId, listOf<AllScoresGameObj>())
}
}
你觉得怎么样?
if (!gamesPerCountriesMap.get(countryName)?.containsKey(competitionId))
将检查该项目是真、假还是空。“if”语句要求真或假。这就是为什么您会看到“类型不匹配:推断类型是布尔值?但布尔值是意料之中的”
if (gamesPerCountriesMap.get(countryName) == null || !gamesPerCountriesMap.get(countryName)!!.containsKey(competitionId))
如果项目为空,或者如果不为空但也不包含competitionID,那么这样做,这就是您想要使用的。
编辑:
您还希望允许地图包含如下空值:
val gamesPerCountriesMap = mutableMapOf<String,MutableMap<Long, List<AllScoresGameObj>>?>()
末尾的 “?” 允许嵌套的可变映射为空。
基本上在Java中,布尔值是一种对象类型。它有 3 个可能的值:真、假和空。由于 kotlin 具有空安全功能,因此在对象类型中使用 ?,如布尔值?
,这就是为什么它要求您确保数据不为空。因此,对于您的代码:
if (!gamesPerCountriesMap.get(countryName)?.containsKey(competitionId))
{
gamesPerCountriesMap.get(countryName)?.put(competitionId, listOf<AllScoresGameObj>())
}
它检查<code>get</code>方法是否返回null,如果不是,则继续执行下一个函数<code>containsKey</code>。如果它为空,那么它将传递If语句。对于非空断言,它强制使用<code>布尔值数据类型转换为布尔
。如果您确定数据不能为空,这可以使用,否则它会破坏您的程序,因为您正在访问空数据中的函数。所以这取决于您的选择,您可以使用<code>吗或如果你确定它不是空的。
你必须处理可空的
mutableMapOf<String?, MutableMap...
这意味着键可以是空字符串
如果国家名称
是一个字段,则
countryName?.let {
//your validation here
}
字段可以更改,所以编译器不知道它是否可以为空。
或
val safeName = countryName ?: return
有人能用简单的英语解释一下这句话背后的逻辑吗? 假设mContainsLoadingRow为布尔值,如果< code>mContainsLoadingRow为< code>true, 然后返回< code > getContentDataSize()1 。 如果没有,则返回 这是正确的看待方式吗?
今天我得到了一个关于代码的评论,考虑到我在学校作业中检查变量是真还是假的方式。 我编写的代码如下所示: 他们说这样写更好/更整洁: 例如,0和1不应该在该变量中。
是否可以编写如下JPQL查询: <代码>选择计数(*) 这将根据实体填充条件是否存在返回真/假布尔值? 我想这样使用查询: 我示例中的查询在语法上不正确(解析错误),但是是否有任何正确的方法可以像在JPQL中那样进行检查,从而返回布尔值,或者只有在Java代码中才有可能?
因此,在Java中,您可以调用一些在上返回的方法,例如,。我想在ftl文件中使用它,但由于某种原因这不起作用。 我对ftl很陌生,我今天才开始学习,但是,为什么这不管用呢?在java中,如果语句接受布尔值,则startsWith方法返回布尔值,那么这里的问题是什么? 错误为:
我正在使用MyBatis调用PL SQL数据库中的一个函数。该函数中有一个OUT参数为布尔值,如下所示: 我的问题是,当我试图从xml映射器调用函数时,每次尝试mybatis都不能识别布尔输出,并抛出me和错误,就像不兼容的类型一样。另外,当我试图从PLSQL Developer测试该函数时,它会进行如下转换并以位形式返回布尔值。 忽略这个整数并指定MyBatis将输出视为布尔值是正确的?我怎么能
问题内容: 我在从golang的if语句中返回函数的预期return语句时遇到麻烦。 我提供了以下代码: 主函数是否应该打印出随机函数返回的字符串值?我得到的是 有人知道如何实现这一目标吗? 问题答案: 即使该函数从未返回值,您也必须在末尾添加一个: http://play.golang.org/p/XFsPL2G15R