Preconditions class provides number of
static methods to verify the preconditions of our code.
1.Check for valid arguments
Preconditions class provides
checlArgument method, to verify given argument. Preconditions class provides
three variants of checkArgument method.
public static void checkArgument(boolean expression)
public static void checkArgument(boolean expression, @Nullable Object
errorMessage)
public static void checkArgument(boolean expression, @Nullable String
errorMessageTemplate, @Nullable Object... errorMessageArgs)
Above methods return IllegalArgumentException,
if the expression evaluates to false.
Following application checks for
username.
import com.google.common.base.Preconditions;
public class PreConditionsEx {
public static void validate(String userName) {
Preconditions.checkArgument(userName.length() > 7,
"Given userName %s must has minimum 7 characters", userName);
}
public static void main(String args[]) {
String userName = "abcd";
validate(userName);
}
}
When you tries to run above program,
you will get following error.
Exception in thread "main"
java.lang.IllegalArgumentException: Given userName abcd must has minimum 7
characters
at
com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
at
guava.PreConditionsEx.validate(PreConditionsEx.java:8)
at
guava.PreConditionsEx.main(PreConditionsEx.java:14)
2. Check index in arrays, strings, lists etc.,
Preconditions class provides following
methods to check for valid indexes in arrays, strings, lists etc.,
public static int checkElementIndex(int
index, int size)
public static int checkElementIndex(int
index, int size, @Nullable String desc)
If index is <=0 (or) >= size,
then checkElementIndex method throws IndexOutOfBoundsException.
import com.google.common.base.Preconditions;
public class PreConditionsEx {
public static int getElementAt(int index, int arr[]) {
Preconditions.checkElementIndex(index, arr.length,
"Index must >=0 and <= " + arr.length);
return arr[index];
}
public static void main(String args[]) {
int a[] = { 2, 3, 5, 7, 1, 3, 4, 6 };
getElementAt(-3, a);
}
}
Output
Exception in thread "main"
java.lang.IndexOutOfBoundsException: Index must >=0 and <= 8 (-3) must
not be negative
at
com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:310)
at
guava.PreConditionsEx.getElementAt(PreConditionsEx.java:8)
at
guava.PreConditionsEx.main(PreConditionsEx.java:14)
3. Check for null conditions
Preconditions class provides following
methods to check for null conditions.
public static <T> T
checkNotNull(T reference)
public static <T> T
checkNotNull(T reference, @Nullable Object errorMessage)
public static <T> T
checkNotNull(T reference, @Nullable String errorMessageTemplate, @Nullable
Object... errorMessageArgs)
If ‘reference’ is null, then this
method throws NullPointerException.
import com.google.common.base.Preconditions; public class PreConditionsEx { public static void validate(String userName) { Preconditions.checkNotNull(userName, "User name must not be null"); Preconditions.checkArgument(userName.length() > 7, "Given userName %s must has minimum 7 characters", userName); } public static void main(String args[]) { String userName = null; validate(userName); } }
When you tries to run above program,
you will get following error.
Exception in thread "main"
java.lang.NullPointerException: User name must not be null
at
com.google.common.base.Preconditions.checkNotNull(Preconditions.java:226)
at
guava.PreConditionsEx.validate(PreConditionsEx.java:8)
at
guava.PreConditionsEx.main(PreConditionsEx.java:15)
4. Check for valid sub range of list, array, String etc.,
Preconditions class provides checkPositionIndexes
method, to check for valid indexes (start and end).
public static void checkPositionIndexes(int start, int end, int size)
Checks that [start, end) is a valid sub
range of a list, string, or array with the specified size. If not in range, it
throws IndexOutOfBoundsException.
import com.google.common.base.Preconditions; public class PreConditionsEx { /* Print elements of array from start to end */ public static void printArr(int arr[], int start, int end) { Preconditions.checkPositionIndexes(start, end, arr.length); for (int i = start; i < end; i++) { System.out.println(arr[i]); } } public static void main(String args[]) { int arr[] = { 2, 3, 5, 7, 11, 13, 15, 17 }; printArr(arr, 3, 10); } }
Output
Exception in thread "main"
java.lang.IndexOutOfBoundsException: end index (10) must not be greater than size
(8)
at
com.google.common.base.Preconditions.checkPositionIndexes(Preconditions.java:383)
at
guava.PreConditionsEx.printArr(PreConditionsEx.java:9)
at
guava.PreConditionsEx.main(PreConditionsEx.java:18)
5. Check Boolean expressions
By using checkState method, you can
check for Boolean expressions.
public static void checkState(boolean expression)
public static void checkState(boolean expression, @Nullable Object
errorMessage)
public static void checkState(boolean expression, @Nullable String
errorMessageTemplate, @Nullable Object... errorMessageArgs)
Above methods throw IllegalStateException,
if expression evaluates to false.
import com.google.common.base.Preconditions; public class PreConditionsEx { public static int empIds[] = { 2, 3, 5, 7, 11, 13, 15, 17 }; public static void printEmpDetail(int empId) { Preconditions.checkPositionIndex(empId, empIds.length); Preconditions.checkState(checkEmployeeIdFromDB(empId)); System.out.println("Employee id " + empId + " exist in database"); } public static boolean checkEmployeeIdFromDB(int empId) { for (int i = 0; i < empIds.length; i++) { if (empId == empIds[i]) return true; } return false; } public static void main(String args[]) { printEmpDetail(7); printEmpDetail(21); } }
Output
Employee id 7 exist in database
Exception in thread "main"
java.lang.IndexOutOfBoundsException: index (21) must not be greater than size
(8)
at
com.google.common.base.Preconditions.checkPositionIndex(Preconditions.java:353)
at
com.google.common.base.Preconditions.checkPositionIndex(Preconditions.java:336)
at
guava.PreConditionsEx.printEmpDetail(PreConditionsEx.java:10)
at
guava.PreConditionsEx.main(PreConditionsEx.java:25)
No comments:
Post a Comment