因为AI,所以deepseek
想要实现的效果,
根据第一个operateTarget参数,决定后面targetData、targetDataII可以放入的参数值
//根据operateTarget参数,决定后面targetData、targetDataII可以放入的参数值
operateTarget 0x01 0x02 0x03 0x04 0x05
targetData 1-6 20|0f 20|0f 20|0f 20|0f
targetDataII 00 00 00 00 1-60
于是,有了这样的答案:
public class TankTestParams {
private final int operateTarget;//都是十进制数,
private final int targetData;//都是十进制数
private final int targetDataII;//都应该是十进制数
private TankTestParams(Builder builder) {
this.operateTarget = builder.operateTarget;
this.targetData = builder.targetData;
this.targetDataII = builder.targetDataII;
validate();
}
private void validate() {
switch (operateTarget) {
case 0x01:
validateForType1();
break;
case 0x02:
case 0x03:
case 0x04:
validateForType2_4();
break;
case 0x05:
validateForType5();
break;
default:
throw new IllegalArgumentException("无效的操作目标");
}
}
private void validateForType1() {
if (targetData < 1 || targetData > 6) {
throw new IllegalArgumentException("targetData超出范围 1-6");
}
if (targetDataII != 0x00) {
throw new IllegalArgumentException("targetDataII必须为0");
}
}
private void validateForType2_4() {
if (targetData != 0x20 && targetData != 0x0f) {
throw new IllegalArgumentException("targetData必须为0x20或0x0f");
}
if (targetDataII != 0x00) {
throw new IllegalArgumentException("targetDataII必须为0");
}
}
private void validateForType5() {
if (targetData != 0x20 && targetData != 0x0f) {
throw new IllegalArgumentException("targetData必须为0x20或0x0f");
}
if (targetDataII < 1 || targetDataII > 60) {
throw new IllegalArgumentException("targetDataII超出范围 1-60");
}
}
// Builder模式
public static class Builder {
private final int operateTarget;
private int targetData = 0;
private int targetDataII = 0;
public Builder(int operateTarget) {
this.operateTarget = operateTarget;
}
/**
* 十六进制->十进制
* 20 -> 32
* 0f -> 15
* @param targetData
* @return
*/
public Builder targetData(int targetData) {
this.targetData = targetData;
return this;
}
public Builder targetDataII(int targetDataII) {
this.targetDataII = targetDataII;
return this;
}
public TankTestParams build() {
return new TankTestParams(this);
}
}
// Getters
public int getOperateTarget() { return operateTarget; }
public int getTargetData() { return targetData; }
public int getTargetDataII() { return targetDataII; }
}
/*
// 使用方法
public static String testing4Tank(TankTestParams params) {
// 直接使用已验证的参数
return executeTest(params.getOperateTarget(),
params.getTargetData(),
params.getTargetDataII());
}
// 调用示例
String result = testing4Tank(
new TankTestParams.Builder(0x01)
.targetData(3)
.targetDataII(0x00)
.build()
);
//一旦传入的数据不符合,就会抛出异常提示
*/