java - 在验证中检查多个条件
问题描述
这是实现的完整抽象类。我想知道是否有一种方法可以在攻击和战士等级为 0 的情况下返回两个异常。我想在这种情况下显示两条消息,但如果我只单独测试它们中的每一个,我似乎无法在异常中抛出第二条消息。例如,如果我测试攻击 <= 0 那么它应该告诉我“攻击不能为零”,但是如果攻击 <= 0 并且防御 <=0 它应该告诉我“攻击不能为零。防御不能为零”我想要要做到这一点,而无需为每种可能性设置 if 条件,因为当添加更多可能性时,它会变得混乱。
public abstract class Warrior {
public int level;
public int attack;
public int defense;
public abstract int getLevel();
public abstract int getAttack();
public abstract int getDefense();
public static abstract class Builder {
public Warrior warrior;
public Builder attack(int attack) {
return this;
}
public Builder defense(int defense) {
return this;
}
public Warrior build() {
return warrior;
}
public void validate(Warrior W) {
if (W.level <= 0 && W.attack > 0 && W.defense > 0) {
throw new IllegalStateException("Level must be greater than 0. ");
} else if (W.defense <= 0 && W.attack > 0 && W.level > 0) {
throw new IllegalStateException("Defense must be greater than 0. ");
} else if (W.attack <= 0 && W.defense > 0 && W.level > 0) {
throw new IllegalStateException("Attack must be greater than 0. ");
} else if (W.attack <= 0 && W.level <= 0 && W.defense > 0) {
throw new IllegalStateException("Level must be greater than 0. Attack must be greater than 0. ");
} else if (W.level <= 0 && W.defense <= 0 && W.attack > 0) {
throw new IllegalStateException("Level must be greater than 0. Defense must be greater than 0. ");
} else if (W.level <= 0 && W.defense <= 0 && W.attack <= 0) {
throw new IllegalStateException(
"Level must be greater than 0. Attack must be greater than 0. Defense must be greater than 0. ");
}
}
}
}
解决方案
您可以自行检查每个条件,并将所需的子消息附加到结果消息中,如果消息的长度 > 0,则抛出异常。类似于:
public void validate(Warrior W) {
String message = "";
if (W.level <= 0) {
message += "Level must be greater than 0. ";
}
if (W.defense <= 0) {
message += "Defense must be greater than 0. ";
}
if (W.attack <= 0) {
message += "Attack must be greater than 0. ";
}
if (!message.isEmpty()) {
throw new IllegalStateException(message);
}
else {
//do whatever
}
}
推荐阅读
- unity3d - Unity 检测 ui 画布上的封闭白色表面
- cpu-architecture - 为什么 FADDP D-form 在 Cortex-A72 上的吞吐量高于 FADDP Q-form
- java - 当我尝试运行@Query 时,为什么 JPA /Hibernate 会抛出“java.lang.NegativeArraySizeException: -1”?
- html - 以角度分页显示表格的更多行
- microservices - Question about architecture of microservices over http for Nestjs
- laravel - 与环境关联的一个或多个 TargetGroup 处于降低的健康状态
- oracle-apex - Oracle APEX 自定义成功消息
- node.js - Firestore 错误:没有要更新的文档(在重试方法中)
- arrays - 为什么我在 C 中的数组函数长度给出了错误的答案?
- vue.js - 通过 vuex 在 v-select 中显示数据(通过 axios)