2

ルックアップがnullを返したときにデフォルト値を処理するための次のコードがあります

def user = User.find('admin') 
    return user?.address?user:null 

これは期待どおりに機能します

ただし、次のような Elvis 演算子を使用する場合:

def user = User.find('admin') 
    return user?.address?:null 

例外がスローされます:

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'true'         with class 'java.lang.Boolean' to class 'com.code.User' 

Elvis が三項演算子とまったく同じように動作することを期待していました....?

ありがとう!

4

2 に答える 2

4

これはuser、ユーザーが null ではなく、次のようにuser.address評価される場合に返されtrueます。

return user?.address?user:null 

これはuser.address、ユーザーが null ではなく、次のようにuser.address評価される場合に返されますtrue

return user?.address?:null 

user.addressはブール値だと思いますか?Userしたがって、2番目のものは、おそらく定義でa を返すと言うメソッドからブール値を返そうとしています

于 2012-08-17T11:21:02.290 に答える
0

問題は、使用するときです

user?.address?user:null

ユーザーがアドレスを持っている場合、ユーザーを返します。使用するとき

user?.address?:null 

アドレスを返そうとしますが、ユーザーインスタンスは返そうとしません。

于 2012-08-17T11:43:01.263 に答える