gpt4 book ai didi

java - SONAR 提示改变条件,因此它并不总是评估为 "false"

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:37:46 26 4
gpt4 key购买 nike

public String generateURLSafeToken(String username, char[] password) throws CredentialTokenException {
this.tokenValid = false;

String token = null;
if ((username.length() < 1) || (username == null)) {
throw new CredentialTokenException("Username cannot be an empty string or null.");
}
if ((password.length < 1) || (password == null)) {
throw new CredentialTokenException("Password cannot be an empty or null.");
}

I am facing this error in line 4 and line 7 (username == null and password == null)

我的代码中需要这部分。我正在尝试 isEmpty() 而不是 null 但也面临着问题。修复此 SONAR 错误的替代方法或解决方案是什么

最佳答案

始终评估为 false 的条件是username == nullpassword == null .

我们以 username 为例.接线员||short-circuiting这意味着如果左侧是 true,它不会评估右侧.基本上有两种情况:

  • username给出的不是 null .条件username.length() < 1被评估
    • 如果结果是true ,我们直接返回,输入if分支机构
    • 如果结果是false ,我们尝试评估 username == null .但是由于username给出的不是 null ,这总是评估为false .
  • username给出的是 null .条件username.length() < 1被评估。这实际上就停在那里:它会抛出一个 NullPointerException并且不会评估右侧。

因此,您可以看到每当 username == null实际上评估了条件,结果总是false .这就是 SonarQube 警告告诉您的内容。

此处的解决方案是反转您的 2 个条件。考虑拥有

if (username == null || username.length() < 1)

相反。如果您重新开始并检查每个案例,您会注意到没有一个表达式会始终具有相同的结果:

  • username给出的不是 null .第一个条件明确评估为 false第二个被评估,可能返回 truefalse .
  • username给出的是 null .第一个条件明确评估为 true和短路。

关于java - SONAR 提示改变条件,因此它并不总是评估为 "false",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39491377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com