Android studio 给出不同结果的Kotlin表达式(运行时与IDE求值表达式)
我需要加入两个列表,并检查是否有任何项目设置了某些标志。 这给了我一些不好的结果。调试期间:Android studio 给出不同结果的Kotlin表达式(运行时与IDE求值表达式),android-studio,kotlin,debugging,Android Studio,Kotlin,Debugging,我需要加入两个列表,并检查是否有任何项目设置了某些标志。 这给了我一些不好的结果。调试期间: 行前的数据表示result=true(true应该是正确答案) 我通过运行程序得到result=false 在该行之后,当我使用Evaluate expression工具时,我得到result=true 绝对不是问题的是,之间的数据没有变化 my app/IDE插件的Kotlin版本不同: val result: Boolean = aList.union(bList).any { it.somethi
result=true
(true
应该是正确答案)result=false
result=true
val result: Boolean = aList.union(bList).any { it.something?.someOtherFlag == true }
我想要的是一个解释:问题出在哪里?union方法返回一个只保留不同元素的集合,并且它可能(可能?)在运行和在调试器中求值时丢弃不同的元素。我不确定它应该有多确定,但顺序可能很重要 如果元素的
equals()
和/或hashCode()
是在不使用something
的情况下定义的,或者equals()
/hashCode()
是在不使用sometherflag
的情况下定义的,则可能发生这种情况。这些类是如何定义的
请注意,对于
数据类
es,生成的equals
和hashcode
方法只考虑主构造函数中存在的属性。我想知道如果用常规列表串联替换union
,会发生什么情况。另外,如何定义元素的类型?这些是数据类吗?如果你共享2个列表的实际内容会有帮助。这正是问题所在,我的同龄人没有考虑某个问题。不过有一个问题:这里的确切错误是什么?aList.union(bList)
在运行时是否不包含元素,或者过滤器是否不工作,因为编译器假定项目相等,因此无需检查标志?@Simonunion
方法的返回值是一个集合,因此在运行时该集合不能有重复项(重复项是由hashcode()
/equals()
duo定义的)。因此简而言之aList.union(bList)
将缺少一些元素,而aList+bList
将保留所有内容。过滤器很好。
Kotlin Plugin: 203-1.5.0
App: 1.4.21