web-dev-qa-db-fra.com

Quel serait le type de retour de cette méthode en groovy?

J'ai une méthode comme celle-ci:

def getInformation ()  {

  return [true, "reason why"]
}

que j'utilise comme ça

def (isClear, reason) = getInformation()

Existe-t-il un moyen de définir un type de retour pour cette méthode afin qu'il soit préférable de lire lorsque quelqu'un passe par la méthode?

16
Anthony

Le véritable type de retour de cette méthode est Object, puisque vous l'avez déclaré en utilisant 'def'. Cela signifie qu'il peut retourner n'importe quoi, quel que soit l'objet que vous retournez réellement.

Le code suivant serait tout aussi valide:

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

ou

def getInformation ()  {    
  return 42
}

Mais le type de retour de la méthode n'a pas changé.

La vraie question ici est: pourquoi choisiriez-vous une telle approche? À mon avis, ce qui suit rendrait les choses beaucoup plus claires:

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

Cela serait beaucoup plus clair pour l'appelant, et la seule chose que vous auriez besoin de créer est une classe triviale:

class Result {
     boolean success
     String reason
}

Vous disposez maintenant d'une API clairement définie. Je n'utiliserais jamais def dans une signature de méthode, à cause du problème que vous rencontrez ici.

28
Erik Pragt

Le type de retour sera List, plus exactement ArrayList avec deux éléments de type Boolean, String

Et comme une liste générique ne peut être que d'un seul type (dans ce cas, Object), il est impossible de définir plusieurs types de retour.

8
fabiangebert

Anthony, mieux dans ton cas pour retourner une carte [isClear:true, reason:"reason why"]. Ensuite, dans votre code, obtenez des valeurs:

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

Existe-t-il un moyen de définir un type de retour pour cette méthode afin qu'il soit préférable de lire lorsque quelqu'un passe par la méthode?

Pas vraiment, vous pouvez le changer en ceci, mais ce n'est pas beaucoup mieux:

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

Cependant, vous pouvez définir les types des variables auxquelles sont affectées les valeurs de retour, ce qui rend cette partie du code plus lisible.

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

def (boolean isClear, String reason) = getInformation()    
5
Dónal