!"".equals
时间: 2023-10-11 10:10:27 浏览: 68
重写equals方法的原则是在比较两个对象是否相等时,要确保满足以下条件:
1. 自反性:对于任何非空引用值x,x.equals(x)应该返回true。
2. 对称性:对于任何非空引用值x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。
3. 传递性:对于任何非空引用值x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。
4. 一致性:对于任何非空引用值x和y,多次调用x.equals(y)应该始终返回相同的结果,前提是对象上的信息没有被修改。
5. 非空性:对于任何非空引用值x,x.equals(null)应该返回false。
相关问题
!super.equals(obj)
`super.equals(obj)` 是Java语言中的一个语法,它用于比较当前对象(子类的对象)与其父类引用(`super`)所指向的对象是否相等。当你在一个子类的方法中想要检查传入的对象是否与父类实例相匹配时,可以使用这个构造。
在`equals()` 或 `compareTo()` 等需要进行比较的方法中,如果覆盖了父类的 `equals()` 实现,通常会先通过 `super.equals(obj)` 检查原始的行为,然后再添加或修改自定义的比较逻辑。这样做的目的是为了保持方法签名的一致性和继承链的预期行为。
例如:
```java
public class Parent {
@Override
public boolean equals(Object obj) {
// 父类的equals实现
}
}
public class Child extends Parent {
@Override
public boolean equals(Object obj) {
if (obj instanceof Child && super.equals(obj)) {
// 子类的equals实现,先检查是否是同类并调用父类的equals
} else {
// 其他自定义比较逻辑
}
}
}
```
优化这段Java代码:if (("S".equals(dept) && "Y".equals(bagInfo.getBagSOpen()) && !"Y".equals(bagInfo.getBagSFinished())) || ("C".equals(dept) && "Y".equals(bagInfo.getBagCOpen()) && !"Y".equals(bagInfo.getBagCFinished())) || ("C".equals(dept) && "Y".equals(bagInfo.getBagGOpen()) && !"Y".equals(bagInfo.getBagGFinished()))) { record.setBagState("0"); record.setBagDescribe("需开包"); } else if (("S".equals(dept) && "Y".equals(bagInfo.getBagSOpen()) && "Y".equals(bagInfo.getBagSFinished())) || ("C".equals(dept) && "Y".equals(bagInfo.getBagCOpen()) && "Y".equals(bagInfo.getBagCFinished())) || ("C".equals(dept) && "Y".equals(bagInfo.getBagGOpen()) && "Y".equals(bagInfo.getBagGFinished()))) { record.setBagState("0"); record.setBagDescribe("开包完成"); } else if ((("S".equals(dept) && "N".equals(bagInfo.getBagSOpen()) && "N".equals(bagInfo.getBagSFinished())) || ("C".equals(dept) && "N".equals(bagInfo.getBagCOpen()) && "N".equals(bagInfo.getBagCFinished())) || ("C".equals(dept) && "N".equals(bagInfo.getBagGOpen()) && "N".equals(bagInfo.getBagGFinished())))) { record.setBagState("0"); record.setBagDescribe("正常"); } else { record.setBagState("0"); record.setBagDescribe("未知"); }
可以将多个if-else语句合并为一个switch-case语句,将相同的代码提取出来,减少代码重复:
```
switch (dept) {
case "S":
if ("Y".equals(bagInfo.getBagSOpen())) {
if ("Y".equals(bagInfo.getBagSFinished())) {
setBagState(record, "0", "开包完成");
} else {
setBagState(record, "0", "需开包");
}
} else if ("N".equals(bagInfo.getBagSOpen()) && "N".equals(bagInfo.getBagSFinished())) {
setBagState(record, "0", "正常");
} else {
setBagState(record, "0", "未知");
}
break;
case "C":
if ("Y".equals(bagInfo.getBagCOpen())) {
if ("Y".equals(bagInfo.getBagCFinished())) {
setBagState(record, "0", "开包完成");
} else {
setBagState(record, "0", "需开包");
}
} else if ("Y".equals(bagInfo.getBagGOpen())) {
if ("Y".equals(bagInfo.getBagGFinished())) {
setBagState(record, "0", "开包完成");
} else {
setBagState(record, "0", "需开包");
}
} else if ("N".equals(bagInfo.getBagCOpen()) && "N".equals(bagInfo.getBagCFinished())) {
setBagState(record, "0", "正常");
} else if ("N".equals(bagInfo.getBagGOpen()) && "N".equals(bagInfo.getBagGFinished())) {
setBagState(record, "0", "正常");
} else {
setBagState(record, "0", "未知");
}
break;
default:
setBagState(record, "0", "未知");
break;
}
private void setBagState(Record record, String state, String describe) {
record.setBagState(state);
record.setBagDescribe(describe);
}
```
阅读全文