1

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

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

ありがとう

4

4 に答える 4

2

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

値の割り当て部分(owner = search.getOwner())をif部分に入れることができますが、User owner宣言はそれ自体である必要があります。

于 2012-04-13T11:30:49.890 に答える
2

あなたのコードでは、所有者はif条件のスコープでローカルに宣言されています。このコード変更を試してください

User owner = null;
if ((owner = (User)search.getOwner()) instanceof User && owner.getId() != null) {
        searchQuery.append("owner_id = :ownerId AND ");
        queryMap.put("ownerId", owner.getId());
    }
于 2012-04-13T11:31:36.847 に答える
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テストの必要がないか、そうでない場合は次のように記述できます。

Object owner = search.getOwner();
if (owner instanceof User && (User) owner.getId() != null) {
    searchQuery.append("owner_id = :ownerId AND ");
    queryMap.put("ownerId", (User) owner.getId());
}
于 2012-04-13T11:33:02.770 に答える
1

Javaでの割り当てはExpressionStatementですが、if条件はExpressionのみを受け入れます。信頼できるソースについては、 Java言語仕様を参照してください。

于 2012-04-13T13:24:48.523 に答える