Каким будет тип возврата этого метода в groovy?

У меня есть такой метод, как:

def getInformation ()  {

  return [true, "reason why"]
}

который я использую как это

def (isClear, reason) = getInformation()

Есть ли способ определить тип возврата для этого метода, чтобы его лучше читать, когда кто-то проходит этот метод?

Ответ 1

Реальный тип возврата этого метода - Object, так как вы объявили его с помощью 'def'. Это означает, что он может вернуть что угодно, независимо от объекта, который вы фактически возвращаете.

Следующий код будет таким же правильным:

def getInformation ()  {    
  return "this is some information"
}

или

def getInformation ()  {    
  return 42
}

Но возвращаемый тип метода не изменился.

Реальный вопрос: почему вы выбрали такой подход? На мой взгляд, следующее было бы намного яснее:

Result getInformation() {
     return new Result(success: true, reason: "why")
}

Это сделает его более понятным для вызывающего, и единственное, что вам нужно создать, - это тривиальный класс:

class Result {
     boolean success
     String reason
}

Теперь у вас есть четко определенный API. Я бы никогда не использовал def в сигнатуре метода из-за проблемы, с которой вы столкнулись.

Ответ 2

Возвращаемый тип будет List, точнее ArrayList с двумя элементами типа Boolean, String

И поскольку общий список может быть только одного типа (в данном случае Object), вы не можете определить несколько типов возврата.

Ответ 3

Энтони, лучше в вашем случае вернуть карту [isClear:true, reason:"reason why"]. Затем в вашем коде получите значения:

Map getInformation ()  {
  return [isClear:true, reason:"reason why"]
}
...
def result =  getInformation ()
if(result.isClear){
   ...
   result.reason
   ...
}

Ответ 4

Есть ли способ определить тип возврата для этого метода, чтобы его лучше читать, когда кто-то проходит этот метод?

Не совсем, вы можете изменить это на это, но это не намного лучше:

List getInformation ()  {
  return [true, "reason why"]
}

Однако вы можете определить типы переменных, которым присваиваются возвращаемые значения, что делает эту часть кода более удобочитаемой.

def getInformation ()  {    
  return [true, "reason why"]
}

def (boolean isClear, String reason) = getInformation()