2012-04-13 13 views
1

Javaでは、以下のような短縮型変数代入を使用しようとしています。現在、ownerは別の行に割り当てられていますが、以下のように同じ行に入れたいと思います。これは機能していません - それは不可能であるか、別の経路がありますか?省略形の変数代入

if ((User owner = search.getOwner()) instanceof User && owner.getId() != null) { 
     searchQuery.append("owner_id = :ownerId AND "); 
     queryMap.put("ownerId", owner.getId()); 
    } 

おかげ

+0

'User'型の変数に格納されているオブジェクトが' instanceof User'であるかどうかをチェックするのは少し奇妙です。変数にnullが含まれていない限り、Javaはこのテストが真であるオブジェクトのみを許可するので、 'instanceof User'テストは'!= null'と簡単に表現できます –

答えて

2

があれば条件の範囲内でローカルに宣言されています。このコードの変更を試してください

User owner = null; 
if ((owner = (User)search.getOwner()) instanceof User && owner.getId() != null) { 
     searchQuery.append("owner_id = :ownerId AND "); 
     queryMap.put("ownerId", owner.getId()); 
    } 
+0

これは役に立ちますが、そこに完全にコードしてください – Webnet

+0

おそらくOPが遭遇する問題(実際には述べられていませんが)は、コードがコンパイルされないということでした。所有者の宣言は別の行に必要です –

+1

@Webnet:そうすることはできません。構文はそれを許可しません。 –

2

いいえ、ありません。少なくとも私が知っている限り。

値割り当て部分(owner = search.getOwner())をif部分に入れることができますが、User owner宣言はそれ自身でなければなりません。あなたのコードの所有者で

1

私の見解では、はるかに読みやすいものは何ですか?コメントで述べたように

User owner = search.getOwner(); 
if (owner instanceof User && owner.getId() != null) { 
    searchQuery.append("owner_id = :ownerId AND "); 
    queryMap.put("ownerId", owner.getId()); 
} 

、どちらかgetOwnerメソッドは、ユーザーを返し、instanceofテストの必要がない、またはそれはあなたが書くことができない場合には:Javaで

Object owner = search.getOwner(); 
if (owner instanceof User && (User) owner.getId() != null) { 
    searchQuery.append("owner_id = :ownerId AND "); 
    queryMap.put("ownerId", (User) owner.getId()); 
} 
+0

search.getOwner()はObjectを返すと思いますので、返された型を(User)search.getOwner()で暗黙的に指す必要があります。それ以外の場合は、instanceOf ownerをチェックする点は何ですか? – ITCuties

+0

@ITCuties True、コピー・ペースト・エラー;-) – assylias

1

Asssignment ExpressionStatementですが、if条件はの式のみを受け入れます。正式な情報源については、Java Language Specificationを参照してください。