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

Groovy中int类型使用>运算符出现类型匹配错误警告问题

解决Groovy中>运算符触发的静态类型匹配警告

这个问题我太熟了——Groovy的静态类型检查器在这种场景下会有点“较真”,原因很简单:你没给greaterThan50方法的nums参数指定类型,所以静态检查器会把列表里的每个num都当成Object类型,而Object并没有compareTo方法(>运算符在Groovy里对于可比较类型会调用这个方法),自然就抛出警告了。下面给你几个靠谱的解决办法:

方案1:给方法参数明确指定类型

这是最直接的方式,让静态检查器清楚知道列表里的元素是Integer类型,这样num > 50的比较就完全合法了:

import groovy.transform.TypeChecked

@TypeChecked
def greaterThan50(List<Integer> nums){ 
    def result = [] 
    nums.each{ num -> 
        if(num > 50) result << num 
    } 
    result 
}
def test = greaterThan50([2, 3, 50, 62, 11, 2999])
assert test.contains(62)

方案2:显式转换元素类型

如果没办法提前确定nums的元素类型(比如可能传入不同类型的列表),可以在比较时把num显式转换成Integer:

import groovy.transform.TypeChecked

@TypeChecked
def greaterThan50(nums){ 
    def result = [] 
    nums.each{ num -> 
        if((num as Integer) > 50) result << num 
    } 
    result 
}
def test = greaterThan50([2, 3, 50, 62, 11, 2999])
assert test.contains(62)

方案3:用Groovy惯用的findAll简化代码

其实Groovy提供了更简洁的列表过滤方法findAll,不仅代码更短,还能自动处理类型推断,完美避开这个警告:

import groovy.transform.TypeChecked

@TypeChecked
def greaterThan50(List<Integer> nums){ 
    nums.findAll { it > 50 }
}
def test = greaterThan50([2, 3, 50, 62, 11, 2999])
assert test.contains(62)

内容的提问来源于stack exchange,提问作者H. Mable

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:39:12