我使用Eclipse 4.7.2在HashMap中发现了一个奇怪的行为.
以下行似乎对我来说是正确的:
infos.containsKey("desc") ? stmt.setString(8, infos.get("desc")) :
stmt.setString(8, "No description");
Run Code Online (Sandbox Code Playgroud)
infos是的类型HashMap<String, String>和PreparedStatement应充满的描述(的值desc)字段在地图上.
但是,Eclipse不是仅仅执行所写的操作,而是指示此行中存在多个错误:
infos.containsKey**("desc")** ? stmt.setString(8, infos.get("desc")) :
stmt.setString(8, "No description"**)**;
Run Code Online (Sandbox Code Playgroud)
我标记了Eclipse中带下划线的字符.
错误消息是:
Multiple markers at this line
- Syntax error on token ")", delete this token
- Syntax error, insert ")" to complete Expression
- Type mismatch: cannot convert from String to
boolean
Run Code Online (Sandbox Code Playgroud)
的功能?操作者相当清楚,但行为不清楚.
有谁能告诉我我错在哪里或如何避免这个错误.
谢谢!
问题是条件运算符boolean ? value1 : value2期望值但stmt.setString返回void表示缺少任何值.
更简单的解决方案将使用Map#getOrDefault(key, defaultValue)Java 8中提供的类似
stmt.setString(8, infos.getOrDefault("desc", "No description"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |