int type> ошибка оператора в Groovy - PullRequest
0 голосов
/ 26 апреля 2018

Используя Groovy, оператор> предупреждает, что тип соответствует неверному.

Это проблема:

def greaterThan50(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)

Строка "if (num> 50)" создает предупреждение.

[Проверка статического типа] - Не удается найти соответствующий метод java.lang.Object # compareTo (java.lang.Integer). Пожалуйста, проверьте правильность заявленного типа и существует ли метод.

50 - это тип int (а также объект, как я знаю), но пример сайта такой. (сайт здесь: http://docs.smartthings.com/en/latest/getting-started/groovy-basics.html#groovy-basics)

def greaterThan50(nums){
   def result = []
   for (num in nums){
       if(num > 50){
            result << num
       }
   }
   result
}
def test = greaterThan50([2, 5, 62, 50, 25, 88])

Как изменить код для сравнения двух типов int?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Чтобы проверка типов работала правильно, вам нужно явно указать аргумент и возвращать типы.Вы также пропустили закрывающую фигурную скобку, чтобы завершить закрытие после each.

List<Integer> 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)

Отличным способом архивации той же функциональности будет

nums.findAll { it > 50 }

, который создает новый список и добавляетвсе числа, которые удовлетворяют условию для вас.

0 голосов
/ 26 апреля 2018

Если вам нужно подавить предупреждение, фактически сделав этот код статически проверенным, вы можете явно объявить тип данных входящего параметра.

def greaterThan50(List<Integer> nums){

Это позволит статической проверке типа связать элемент итерациивведите целое число.

...