提问人:Manoj 提问时间:4/28/2023 更新时间:4/28/2023 访问量:24
Java 框架,用于在运行时验证值(在运行时标识的类型)和条件(如何比较 2 个值)
Java Framework to validate values (Type identified at RunTime) and Condition (how to compare 2 values) at Run time
问:
我目前正在用JAVA实现一个用例,如果有的话,我想寻求论坛的建议
问题陈述
我们想在运行时对 2 个值进行自定义比较
- 第一个值是从 DB 中检索的(始终为 String)
- 第二个值将从 File 中解析(始终为 String)
虽然在 String 中,但值可以是 Integer、Date、Float、Decimal 或 String.。这是从 DB 中的一列推断出来的 需要在 2 个值(例如,>=、<=、>、<)之间应用的条件在 DB 的一列中指定,并以字符串格式提供
但是,有没有更好的框架来处理这些问题??
可能的方法:
- 我们自己实现基于 java 代码中的 DataType 和 String 中的 Condition 进行比较的行为。但问题是有很多用例需要编码和测试。此外,每次添加新条件(如果未涵盖)都需要更改代码
import org.apache.commons.lang3.ObjectUtils;
import java.time.LocalDate;
import java.util.NoSuchElementException;
public enum Operation {
EQUAL_DATE("EQUAL_DATE") {
@Override
public boolean apply(Object left, Object right) {
//Local
try {
LocalDate leftDate = (LocalDate) left;
LocalDate rightDate = (LocalDate) right;
return leftDate.isEqual(rightDate);
} catch (Exception e) {
}
return true;
}
},
LESS_THAN_EQUAL_DATE("LESSTHANEQUAL_DATE") {
@Override
public boolean apply(Object left, Object right) {
try {
LocalDate leftDate = (LocalDate) left;
LocalDate rightDate = (LocalDate) right;
return leftDate.isBefore(rightDate) || leftDate.isEqual(rightDate);
} catch (Exception e) {
}
return true;
}
},
GREATER_THAN_EQUAL_DATE("GREATERTHANEQUAL_DATE") {
@Override
public boolean apply(Object left, Object right) {
try {
LocalDate leftDate = (LocalDate) left;
LocalDate rightDate = (LocalDate) right;
return leftDate.isEqual(rightDate) || leftDate.isAfter(rightDate);
} catch (Exception e) {
}
return true;
}
},
/**
* for Data type agnostic checks ANY is appended
*/
NOT_NULL_ANY("NOT_NULL_ANY") {
@Override
public boolean apply(Object left, Object right) {
// here right doesn't matter, ignore it, always left parameter is the data from file
return ObjectUtils.allNotNull(left);
}
};
private final String operation;
private Operation (String operation) {
this.operation = operation;
}
public static Operation parseOperator(String operator) {
for (Operation op : values()) {
if (op.operation.equals(operator)) return op;
}
throw new NoSuchElementException(String.format("Unknown operator [%s]", operator));
}
public abstract boolean apply(Object left, Object right);
}
`
答: 暂无答案
评论