我不明白这段代码;
有人可以写得正确,所以我也可以理解。
public void deleteStudentsPersistence(Student student) {
em.remove(em.contains(student) ? student : em.merge(student));
}
答案 0 :(得分:4)
这是一个三元运算符,称为条件运算符。它也可以这样写:
public void deleteStudentsPersistence(Student student) {
if (em.contains(student)){
em.remove(student);
} else{
em.remove(em.merge(student));
}
}
基本上,它会在删除之前检查em是否包含学生,否则将其合并
答案 1 :(得分:4)
您在那里使用的运算符称为三元运算符,它的工作方式与if-else语句的工作方式几乎相同。请考虑以下声明:
int min = (a < b) ? a : b;
这意味着:评估(a < b)
的值,如果是,则min的值为a
,否则,min的值为b
。它可以通过这种方式与if-else语句相关:如果(a&lt; b)为真:min = a;否则:min是b。
现在回到你的问题....
em.remove(em.contains(student) ? student : em.merge(student));
这意味着如果em.contains(student)
为真,则执行em.remove(student)
,但如果错误,则执行em.remove(em.merge(student))
。
<强> PS:强>
显然,在许多实际情况中,涉及根据双向条件给变量赋值,这可能是if语句的微妙替代。关于“更有效”的方法有很好的论据,如this post所示,但我个人更喜欢使用三元运算符,因为它的语法长度和可读性相对较短。
我希望这有帮助..快乐编码!