Groovy中List.contains()方法未按预期工作问题求助
问题原因与解决方案
这是个典型的类型不匹配导致的问题,我来给你拆解清楚:
你写的代码里:
List<Long> list = [1, 2, 3] Long number = 3 println(list.contains(number))
看起来你声明了List<Long>,但Groovy在创建[1,2,3]这个字面量列表时,默认会把元素识别为Integer类型——也就是说,你的列表里实际装的是Integer对象,而不是你声明的Long。
当调用contains()方法时,Groovy会用equals()来判断元素是否匹配。而Integer和Long的equals()方法会先检查类型是否一致:如果类型不同,直接返回false,哪怕数值完全一样。这就是为什么你明明数值是3,却得到false的原因。
解决办法有这几种:
- 直接创建Long类型的列表元素:在数字后面加
L,明确指定是Long类型List<Long> list = [1L, 2L, 3L] Long number = 3 println(list.contains(number)) // 输出true - 把Long类型的数字转成Integer:如果列表必须保留Integer元素,可以转换后再判断
List<Long> list = [1, 2, 3] Long number = 3 println(list.contains(number.intValue())) // 输出true - 用Groovy的宽松匹配方法
isCase():它会自动处理数值类型的兼容比较List<Long> list = [1, 2, 3] Long number = 3 println(list.isCase(number)) // 输出true
内容的提问来源于stack exchange,提问作者Jakov
相关产品推荐
相关产品推荐

