Каким будет тип возврата этого метода в 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()