私はこのような方法を持っています:
def getInformation () {
return [true, "reason why"]
}
私はこのように使っています
def (isClear, reason) = getInformation()
このメソッドの戻り値の型を定義する方法はあるので、誰かがメソッドを通過するときに読む方が良いでしょうか?
このメソッドの実際の戻り値の型はObjectです。これは、 'def'を使用して宣言したためです。つまり、実際に返すオブジェクトに関係なく、何でも返すことができます。
次のコードも同様に有効です。
def getInformation () {
return "this is some information"
}
または
def getInformation () {
return 42
}
ただし、メソッドのreturntypeは変更されていません。
ここでの本当の問題は、なぜそのようなアプローチを選ぶのかということです。私の意見では、次のようにするとより明確になります。
Result getInformation() {
return new Result(success: true, reason: "why")
}
これにより、呼び出し元はより明確になり、作成する必要があるのは簡単なクラスだけです。
class Result {
boolean success
String reason
}
これでAPIが明確に定義されました。ここで直面している問題のため、メソッドシグネチャでdefを使用することはありません。
戻り値の型はリスト、より正確にはブール型の2つの要素を持つArrayList、文字列になります。
また、ジェネリックリストは単一の型(この場合はオブジェクト)にしかできないため、複数の戻り値の型を定義する方法はありません。
アンソニー、あなたの場合はマップを返すほうがよい[isClear:true, reason:"reason why"]
。次に、コードで値を取得します。
Map getInformation () {
return [isClear:true, reason:"reason why"]
}
...
def result = getInformation ()
if(result.isClear){
...
result.reason
...
}
このメソッドの戻り値の型を定義する方法はあるので、誰かがメソッドを通過するときに読む方が良いでしょうか?
実際には、これを次のように変更できますが、それほど良くはありません。
List getInformation () {
return [true, "reason why"]
}
ただし、戻り値が割り当てられる変数のタイプを定義できるため、コードのその部分が読みやすくなります。
def getInformation () {
return [true, "reason why"]
}
def (boolean isClear, String reason) = getInformation()