You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:43:40