有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

springboot如何在java中避免多个或(| |)进行空验证,springboot

我有三个来自用户的输入

字符串键1
字符串键2
字符串键3

用户一次只能传递一个键作为输入。我正在验证它如下

在我的代码中,我正在检查

if(key1 == null && key2 == null && key3 == null){
      throw new Exception("invalid input");
}else if((null != key1 && null != key2) || (null != key2 && null != key3) || (null != key1 && null != key3)){
    throw new Exception("invalid input");
}

我们能避免这些or条件吗?可能正在使用Java-8

如对此有任何想法/建议,将不胜感激

注意:我有一个JUnit测试代码,所以我还需要减少测试用例的数量


共 (4) 个答案

  1. # 1 楼答案

    您不必显式地验证输入参数,Spring默认情况下禁止空注入。有关更多信息,请参见@Value

        @Value("${key1:default}")
        private String withDefault;
    
        @Value("${key2}")
        private String required;
    
        @Nullable
        @Value("${key3:#{null}}")
        private String nullable;
    
    
  2. # 2 楼答案

    您可以计算不是null的字符串,并检查该数字是否等于1

    int notNullStrings = 0;
    if(key1 != null) notNullStrings++;
    if(key2 != null) notNullStrings++;
    if(key3 != null) notNullStrings++;
    if(notNullStrings != 1) {
        throw new Exception("invalid input");
        
    }
    
  3. # 3 楼答案

    使用? :三元条件运算符计算非空值的数量

    if ((key1 != null ? 1 : 0) + (key2 != null ? 1 : 0) + (key3 != null ? 1 : 0) != 1)
        throw new IllegalArgumentException("Exactly one of key1, key2, and key3 must be given");
    
  4. # 4 楼答案

    使用流api,可以这样做:

    int count = Stream.of(key1, key2, key3).filter(Objects::nonNull).count();
    if(count != 1) {
      throw new Exception("invalid input");
    }