我经常遇到一种验证模式,其中一些变量必须包含前缀数量的值之一才能有效。
PSEUDO CODE:
IF x == CONSTANT_1 || X == CONSTANT_2 || ... || x == CONSTANT_N
THEN X is valid
为了避免 OR 术语链,我创建了一个静态的最终不可修改集,其中包含所有常量:
public final static String CONSTANT_1 = *value* ;
public final static String CONSTANT_2 = *value* ;
...
public final static String CONSTANT_N = *value* ;
public final static Set SET_OF_CONSTANTS = Collections.unmodifiableSet(new HashSet(){
private static final long serialVersionUID = 1L;
{
add(CONSTANT_1);
add(CONSTANT_2);
...
add(CONSTANT_3);
}
});
我通过以下方式执行检查:
if(!SET_OF_CONSTANTS.contains(x)){
//X NOT VALID
}
我想知道这是否是一种好的编程实践,是否有任何替代方法,以及使用哈希表查询(理论上为 O(1))而不是 OR 术语链是否可以提高性能,也许还可以代码可读性。