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

Java 中的赋值是一个ExpressionStatement,而 if 条件只接受一个Expression。有关权威来源,请参阅Java 语言规范

于 2012-04-13T13:24:48.523 回答
1

以下代码有什么问题,在我看来更具可读性?

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

如评论中所述, getOwner 返回一个 User 并且不需要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 回答