使用Eclipse 4.7.2时HashMap containsKey语法报错问题求助
问题分析与解决方法
嘿,我来帮你理清这个问题的根源~
你遇到的看似奇怪的语法错误,核心原因其实是三目运算符的使用场景不对。三目运算符condition ? expr1 : expr2是一个表达式,它必须返回一个具体的值,而不是用来执行没有返回值的方法。
为什么你的代码会报错?
你写的代码里,三目运算符的两个分支都是调用stmt.setString(8, ...),而PreparedStatement.setString()方法的返回值是void(没有返回值)。这就违反了三目运算符的规则——它需要两个分支都返回相同类型的有效值,而不是执行一个无返回的操作。
Eclipse给出的那些语法错误提示(比如要求删除或插入)、类型不匹配)其实是编译器在解析非法结构时的误导性反馈,真正的问题是你把三目运算符当成了语句来用,而它本质上是个需要产生值的表达式。
解决方法
有两种简单的修正方式:
方式1:用三目运算符获取值,再统一调用setString
把要设置的字符串先通过三目运算取出来,再传给setString:
String descValue = infos.containsKey("desc") ? infos.get("desc") : "No description"; stmt.setString(8, descValue);
方式2:改用if-else语句(更直观)
如果不需要用表达式的返回值,直接用传统的条件判断语句会更清晰:
if (infos.containsKey("desc")) { stmt.setString(8, infos.get("desc")); } else { stmt.setString(8, "No description"); }
补充小提示
三目运算符适合用来简化“根据条件返回某个值”的场景,比如给变量赋值、作为方法参数传递等,但不要用它来执行无返回值的方法调用——这超出了它的设计用途哦。
内容的提问来源于stack exchange,提问作者Tobias Schäfer
相关产品推荐
相关产品推荐

