54 lines
1.4 KiB
Plaintext
54 lines
1.4 KiB
Plaintext
When boxed type `java.lang.Boolean` is used as an expression to determine the control flow (as described in https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2.5[Java Language Specification §4.2.5 The `boolean` Type and boolean Values]) it will throw a `NullPointerException` if the value is `null` (as defined in https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.8[Java Language Specification §5.1.8 Unboxing Conversion]).
|
|
|
|
|
|
It is safer to avoid such conversion altogether and handle the `null` value explicitly.
|
|
|
|
Note, however, that no issues will be raised for Booleans that have already been null-checked.
|
|
|
|
== Noncompliant Code Example
|
|
|
|
[source,java]
|
|
----
|
|
Boolean b = getBoolean();
|
|
if (b) { // Noncompliant, it will throw NPE when b == null
|
|
foo();
|
|
} else {
|
|
bar();
|
|
}
|
|
----
|
|
|
|
|
|
== Compliant Solution
|
|
|
|
[source,java]
|
|
----
|
|
Boolean b = getBoolean();
|
|
if (Boolean.TRUE.equals(b)) {
|
|
foo();
|
|
} else {
|
|
bar(); // will be invoked for both b == false and b == null
|
|
}
|
|
|
|
|
|
Boolean b = getBoolean();
|
|
if(b != null){
|
|
String test = b ? "test" : "";
|
|
}
|
|
----
|
|
|
|
== See
|
|
|
|
* https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.8[Java Language Specification §5.1.8 Unboxing Conversion]
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
include::highlighting.adoc[]
|
|
|
|
endif::env-github,rspecator-view[]
|