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.");
}
我在第4行和第7行(username == null和password == null)
中遇到此错误
我在代码中需要这部分。我正在尝试isEmpty()而不是null,但也面临着问题。什么是解决此SONAR错误的替代方法或解决方案
答案 0 :(得分:11)
始终评估为false
的条件为username == null
和password == 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
条件,结果始终为if (username == null || username.length() < 1)
。这就是SonarQube警告告诉您的内容。
这里的解决方案是扭转你的两个条件。考虑拥有
username
代替。如果你重新开始并完成每个案例,你会发现没有一个表达式总会有相同的结果:
null
给出的不是false
。第一个条件明确评估为true
,第二个条件进行评估,可能会返回false
或username
。null
给出的是true
。第一个条件清楚地评估为apply plugin: 'java'
configurations {
proguard
}
dependencies {
"com.foo:proguard:1.2.3"
}
jar {
manifest {
attributes('Main-Class': 'some.package.here')
}
}
task proguard {
inputs.file jar.archivePath
outputs.file jar.archivePath // is this correct?
doLast {
ant.taskdef(name: 'proguard', classname: 'foo.bar.ProguardTask', classpath: configurations.proguard.asPath)
ant.proguard {
libraryjar(dir: 'otherfiles/here') // not sure what this does
outjar(name: jar.archivePath)
}
}
}
assemble.dependsOn proguard
proguard.dependsOn jar
和短路。