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
相关产品推荐
相关产品推荐

