Java:HashMap包含skey返回值错误
我在使用Eclipse4.7.2的HashMap中发现了一个奇怪的行为 下面这行对我来说似乎是正确的:Java:HashMap包含skey返回值错误,java,eclipse,Java,Eclipse,我在使用Eclipse4.7.2的HashMap中发现了一个奇怪的行为 下面这行对我来说似乎是正确的: infos.containsKey("desc") ? stmt.setString(8, infos.get("desc")) : stmt.setString(8, "No description"); infos是HashMap的类型,PreparedStatement应该用映射中description(desc)字段的值填充 但Eclipse并不是只执行写在那里的操作,而是指出这行
infos.containsKey("desc") ? stmt.setString(8, infos.get("desc")) :
stmt.setString(8, "No description");
infos
是HashMap
的类型,PreparedStatement
应该用映射中description(desc
)字段的值填充
但Eclipse并不是只执行写在那里的操作,而是指出这行中有多个错误:
infos.containsKey**("desc")** ? stmt.setString(8, infos.get("desc")) :
stmt.setString(8, "No description"**)**;
我标记了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
系统的功能是什么?操作员相当清楚,但行为不清楚
有人能告诉我哪里错了,或者如何避免这个错误吗
谢谢大家! 将代码转换为传统的
if…else
而不是三元运算符
if(infos.containsKey("desc"))
stmt.setString(8, infos.get("desc"));
else
stmt.setString(8, "No description");
将代码转换为传统的
if…else
而不是三元运算符
if(infos.containsKey("desc"))
stmt.setString(8, infos.get("desc"));
else
stmt.setString(8, "No description");
PreparedStatement.setString
方法返回void
三元运算符的目的是返回一个或另一个值。因此,不能使用返回void的表达式。此外,两个表达式必须返回相同类型的值
正如其他地方指出的,您应该使用传统的if。。。else语句,或者这样写:
stmt.setString(8, infos.containsKey("desc") ? infos.get("desc") : "No description")
PreparedStatement.setString
方法返回void
三元运算符的目的是返回一个或另一个值。因此,不能使用返回void的表达式。此外,两个表达式必须返回相同类型的值
正如其他地方指出的,您应该使用传统的if。。。else语句,或者这样写:
stmt.setString(8, infos.containsKey("desc") ? infos.get("desc") : "No description")
问题是条件运算符
布尔?value1:value2
需要值,但返回表示缺少任何值的void
更简单的解决方案是使用Java8提供的
stmt.setString(8, infos.getOrDefault("desc", "No description"));
问题是条件运算符
布尔?value1:value2
需要值,但返回表示缺少任何值的void
更简单的解决方案是使用Java8提供的
stmt.setString(8, infos.getOrDefault("desc", "No description"));
三元运算符中的第二个或第三个操作数表达式调用void方法是编译时错误。更多你可以在这里读到 你可以这样用
String str = infos.containsKey("desc") ? infos.get("desc") : "No description";
stmt.setString(8, str);
三元运算符中的第二个或第三个操作数表达式调用void方法是编译时错误。更多你可以在这里读到 你可以这样用
String str = infos.containsKey("desc") ? infos.get("desc") : "No description";
stmt.setString(8, str);
为什么不
stmt.setString(8,infos.containsKey(“desc”)?infos.get(“desc”):“无描述”)代码>?@EpicPandaForce谢谢,在我的评论中我也是这样做的:-d区别在于后一个三元“返回”一个字符串,该字符串没有分配给任何变量,但可以分配。您的原始版本将“return”void
,无法分配,因此不受支持。从:中,第二个或第三个操作数表达式调用void方法是编译时错误。
为什么不stmt.setString(8,infos.containsKey(“desc”)?infos.get(“desc”):“无描述”)代码>?@EpicPandaForce谢谢,在我的评论中我也是这样做的:-d区别在于后一个三元“返回”一个字符串,该字符串没有分配给任何变量,但可以分配。您的原始版本将“return”void
,无法分配,因此不受支持。从:中,第二个或第三个操作数表达式调用void方法是编译时错误。