20

私はこのような方法を持っています:

def getInformation ()  {

  return [true, "reason why"]
}

私はこのように使用しています

def (isClear, reason) = getInformation()

このメソッドの戻り値の型を定義する方法はありますか?そのため、誰かがメソッドを通過しているときに読む方が良いですか?

4

4 に答える 4

29

'def' を使用して宣言したため、このメソッドの実際の戻り値の型は Object です。これは、実際に返すオブジェクトに関係なく、何でも返すことができることを意味します。

次のコードも同様に有効です。

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 を使用することは決してありません。

于 2013-05-02T15:53:25.407 に答える
8

戻り値の型は List になります。より正確には、Boolean、String 型の 2 つの要素を持つ ArrayList です。

また、一般的な List は単一の型 (この場合は Object) しか持てないため、複数の戻り値の型を定義する方法はありません。

于 2013-05-02T15:46:02.870 に答える