Here
is a guide to a few guarded (defensive) coding techniques:
(1)
Guarding against string nulls
if (StringUtils.isNotBlank(inputString))
{
// Process
}
Will
return false if inputString is blank, spaces or null
(2)
Guarding against empty List
A
list may be not null, yet it can be empty – to check if the list does contain
any elements
If (list != null && !list.isEmpty)
{
// Processing
}
Note:
If
an instanceof check is present, an extra null check is not required
(3) Boolean can have 3 values (not 2) – true, false
and null.
So, Boolean isVerified = getVerified(…)
Assume
isVerified is null, in that case below would fail.
if (isVerified) {
// process
}
Instead:
BooleanUtils.isTrue(Boolean.TRUE) = true
BooleanUtils.isTrue(Boolean.FALSE) = false
BooleanUtils.isTrue(null) = false
if (BooleanUtils.isTrue(isVerified))
{
// process
}
(4)
A list contains different objects
Say, List fruits = new ArrayList();
fruits.add(new Apple())
fruits.add(new Orange())
while (iterator.hasNext()) {
Apple apple = (Apple) iterator.next() ; This
code will fail with a classcast
}
Adding
instanceof check:
while (iterator.hasNext()) {
Object o = iterator.next() ;
if (o instanceof Apple) {
Apple apple
= (Apple) o;
}
}
(5)
Ensuring numeric checks are present
Backdrop:
Say
the following code can fail with a NumberFormat if the ageofdriver is not
numeric
int driverAge = Integer.parseInt(ageOfDriver);
One
of the defensive way of writing that would be as follows:
if (StringUtils.isNotBlank(ageOfDriver)
&& StringUtils.isNumeric(ageOfDriver))
{
int driverAge =
Integer.parseInt(ageOfDriver);
}