Class Assert

java.lang.Object
org.springframework.util.Assert

public abstract class Assert extends Object
Assertion utility class that assists in validating arguments.

Useful for identifying programmer errors early and clearly at runtime.

For example, if the contract of a public method states it does not allow null arguments, Assert can be used to validate that contract. Doing this clearly indicates a contract violation when it occurs and protects the class's invariants.

Typically used to validate method arguments rather than configuration properties, to check for cases that are usually programmer errors rather than configuration errors. In contrast to configuration initialization code, there is usually no point in falling back to defaults in such methods.

This class is similar to JUnit's assertion library. If an argument value is deemed invalid, an IllegalArgumentException is thrown (typically). For example:

 Assert.notNull(clazz, "The class must not be null");
 Assert.isTrue(i > 0, "The value must be greater than zero");

Mainly for internal use within the framework; for a more comprehensive suite of assertion utilities consider org.apache.commons.lang3.Validate from Apache Commons Lang, Google Guava's Preconditions, or similar third-party libraries.

Since:
1.1.2
Author:
Keith Donald, Juergen Hoeller, Sam Brannen, Colin Sampaleanu, Rob Harrop
  • Constructor Details

    • Assert

      public Assert()
  • Method Details

    • state

      public static void state(boolean expression, String message)
      Assert a boolean expression, throwing an IllegalStateException if the expression evaluates to false.

      Call isTrue(boolean, java.lang.String) if you wish to throw an IllegalArgumentException on an assertion failure.

      Assert.state(id == null, "The id property must not already be initialized");
      Parameters:
      expression - a boolean expression
      message - the exception message to use if the assertion fails
      Throws:
      IllegalStateException - if expression is false
    • state

      public static void state(boolean expression, Supplier<String> messageSupplier)
      Assert a boolean expression, throwing an IllegalStateException if the expression evaluates to false.

      Call isTrue(boolean, java.lang.String) if you wish to throw an IllegalArgumentException on an assertion failure.

       Assert.state(entity.getId() == null,
           () -> "ID for entity " + entity.getName() + " must not already be initialized");
       
      Parameters:
      expression - a boolean expression
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalStateException - if expression is false
      Since:
      5.0
    • state

      @Deprecated public static void state(boolean expression)
      Deprecated.
      as of 4.3.7, in favor of state(boolean, String)
      Assert a boolean expression, throwing an IllegalStateException if the expression evaluates to false.
    • isTrue

      public static void isTrue(boolean expression, String message)
      Assert a boolean expression, throwing an IllegalArgumentException if the expression evaluates to false.
      Assert.isTrue(i > 0, "The value must be greater than zero");
      Parameters:
      expression - a boolean expression
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if expression is false
    • isTrue

      public static void isTrue(boolean expression, Supplier<String> messageSupplier)
      Assert a boolean expression, throwing an IllegalArgumentException if the expression evaluates to false.
       Assert.isTrue(i > 0, () -> "The value '" + i + "' must be greater than zero");
       
      Parameters:
      expression - a boolean expression
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if expression is false
      Since:
      5.0
    • isTrue

      @Deprecated public static void isTrue(boolean expression)
      Deprecated.
      as of 4.3.7, in favor of isTrue(boolean, String)
      Assert a boolean expression, throwing an IllegalArgumentException if the expression evaluates to false.
    • isNull

      public static void isNull(@Nullable Object object, String message)
      Assert that an object is null.
      Assert.isNull(value, "The value must be null");
      Parameters:
      object - the object to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object is not null
    • isNull

      public static void isNull(@Nullable Object object, Supplier<String> messageSupplier)
      Assert that an object is null.
       Assert.isNull(value, () -> "The value '" + value + "' must be null");
       
      Parameters:
      object - the object to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object is not null
      Since:
      5.0
    • isNull

      @Deprecated public static void isNull(@Nullable Object object)
      Deprecated.
      as of 4.3.7, in favor of isNull(Object, String)
      Assert that an object is null.
    • notNull

      public static void notNull(@Nullable Object object, String message)
      Assert that an object is not null.
      Assert.notNull(clazz, "The class must not be null");
      Parameters:
      object - the object to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object is null
    • notNull

      public static void notNull(@Nullable Object object, Supplier<String> messageSupplier)
      Assert that an object is not null.
       Assert.notNull(entity.getId(),
           () -> "ID for entity " + entity.getName() + " must not be null");
       
      Parameters:
      object - the object to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object is null
      Since:
      5.0
    • notNull

      @Deprecated public static void notNull(@Nullable Object object)
      Deprecated.
      as of 4.3.7, in favor of notNull(Object, String)
      Assert that an object is not null.
    • hasLength

      public static void hasLength(@Nullable String text, String message)
      Assert that the given String is not empty; that is, it must not be null and not the empty String.
      Assert.hasLength(name, "Name must not be empty");
      Parameters:
      text - the String to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the text is empty
      See Also:
    • hasLength

      public static void hasLength(@Nullable String text, Supplier<String> messageSupplier)
      Assert that the given String is not empty; that is, it must not be null and not the empty String.
       Assert.hasLength(account.getName(),
           () -> "Name for account '" + account.getId() + "' must not be empty");
       
      Parameters:
      text - the String to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the text is empty
      Since:
      5.0
      See Also:
    • hasLength

      @Deprecated public static void hasLength(@Nullable String text)
      Deprecated.
      as of 4.3.7, in favor of hasLength(String, String)
      Assert that the given String is not empty; that is, it must not be null and not the empty String.
    • hasText

      public static void hasText(@Nullable String text, String message)
      Assert that the given String contains valid text content; that is, it must not be null and must contain at least one non-whitespace character.
      Assert.hasText(name, "'name' must not be empty");
      Parameters:
      text - the String to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the text does not contain valid text content
      See Also:
    • hasText

      public static void hasText(@Nullable String text, Supplier<String> messageSupplier)
      Assert that the given String contains valid text content; that is, it must not be null and must contain at least one non-whitespace character.
       Assert.hasText(account.getName(),
           () -> "Name for account '" + account.getId() + "' must not be empty");
       
      Parameters:
      text - the String to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the text does not contain valid text content
      Since:
      5.0
      See Also:
    • hasText

      @Deprecated public static void hasText(@Nullable String text)
      Deprecated.
      as of 4.3.7, in favor of hasText(String, String)
      Assert that the given String contains valid text content; that is, it must not be null and must contain at least one non-whitespace character.
    • doesNotContain

      public static void doesNotContain(@Nullable String textToSearch, String substring, String message)
      Assert that the given text does not contain the given substring.
      Assert.doesNotContain(name, "rod", "Name must not contain 'rod'");
      Parameters:
      textToSearch - the text to search
      substring - the substring to find within the text
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the text contains the substring
    • doesNotContain

      public static void doesNotContain(@Nullable String textToSearch, String substring, Supplier<String> messageSupplier)
      Assert that the given text does not contain the given substring.
       Assert.doesNotContain(name, forbidden, () -> "Name must not contain '" + forbidden + "'");
       
      Parameters:
      textToSearch - the text to search
      substring - the substring to find within the text
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the text contains the substring
      Since:
      5.0
    • doesNotContain

      @Deprecated public static void doesNotContain(@Nullable String textToSearch, String substring)
      Deprecated.
      Assert that the given text does not contain the given substring.
    • notEmpty

      public static void notEmpty(@Nullable Object[] array, String message)
      Assert that an array contains elements; that is, it must not be null and must contain at least one element.
      Assert.notEmpty(array, "The array must contain elements");
      Parameters:
      array - the array to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object array is null or contains no elements
    • notEmpty

      public static void notEmpty(@Nullable Object[] array, Supplier<String> messageSupplier)
      Assert that an array contains elements; that is, it must not be null and must contain at least one element.
       Assert.notEmpty(array, () -> "The " + arrayType + " array must contain elements");
       
      Parameters:
      array - the array to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object array is null or contains no elements
      Since:
      5.0
    • notEmpty

      @Deprecated public static void notEmpty(@Nullable Object[] array)
      Deprecated.
      as of 4.3.7, in favor of notEmpty(Object[], String)
      Assert that an array contains elements; that is, it must not be null and must contain at least one element.
    • noNullElements

      public static void noNullElements(@Nullable Object[] array, String message)
      Assert that an array contains no null elements.

      Note: Does not complain if the array is empty!

      Assert.noNullElements(array, "The array must contain non-null elements");
      Parameters:
      array - the array to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object array contains a null element
    • noNullElements

      public static void noNullElements(@Nullable Object[] array, Supplier<String> messageSupplier)
      Assert that an array contains no null elements.

      Note: Does not complain if the array is empty!

       Assert.noNullElements(array, () -> "The " + arrayType + " array must contain non-null elements");
       
      Parameters:
      array - the array to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the object array contains a null element
      Since:
      5.0
    • noNullElements

      @Deprecated public static void noNullElements(@Nullable Object[] array)
      Deprecated.
      as of 4.3.7, in favor of noNullElements(Object[], String)
      Assert that an array contains no null elements.
    • notEmpty

      public static void notEmpty(@Nullable Collection<?> collection, String message)
      Assert that a collection contains elements; that is, it must not be null and must contain at least one element.
      Assert.notEmpty(collection, "Collection must contain elements");
      Parameters:
      collection - the collection to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the collection is null or contains no elements
    • notEmpty

      public static void notEmpty(@Nullable Collection<?> collection, Supplier<String> messageSupplier)
      Assert that a collection contains elements; that is, it must not be null and must contain at least one element.
       Assert.notEmpty(collection, () -> "The " + collectionType + " collection must contain elements");
       
      Parameters:
      collection - the collection to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the collection is null or contains no elements
      Since:
      5.0
    • notEmpty

      @Deprecated public static void notEmpty(@Nullable Collection<?> collection)
      Deprecated.
      as of 4.3.7, in favor of notEmpty(Collection, String)
      Assert that a collection contains elements; that is, it must not be null and must contain at least one element.
    • noNullElements

      public static void noNullElements(@Nullable Collection<?> collection, String message)
      Assert that a collection contains no null elements.

      Note: Does not complain if the collection is empty!

      Assert.noNullElements(collection, "Collection must contain non-null elements");
      Parameters:
      collection - the collection to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the collection contains a null element
      Since:
      5.2
    • noNullElements

      public static void noNullElements(@Nullable Collection<?> collection, Supplier<String> messageSupplier)
      Assert that a collection contains no null elements.

      Note: Does not complain if the collection is empty!

       Assert.noNullElements(collection, () -> "Collection " + collectionName + " must contain non-null elements");
       
      Parameters:
      collection - the collection to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the collection contains a null element
      Since:
      5.2
    • notEmpty

      public static void notEmpty(@Nullable Map<?,?> map, String message)
      Assert that a Map contains entries; that is, it must not be null and must contain at least one entry.
      Assert.notEmpty(map, "Map must contain entries");
      Parameters:
      map - the map to check
      message - the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the map is null or contains no entries
    • notEmpty

      public static void notEmpty(@Nullable Map<?,?> map, Supplier<String> messageSupplier)
      Assert that a Map contains entries; that is, it must not be null and must contain at least one entry.
       Assert.notEmpty(map, () -> "The " + mapType + " map must contain entries");
       
      Parameters:
      map - the map to check
      messageSupplier - a supplier for the exception message to use if the assertion fails
      Throws:
      IllegalArgumentException - if the map is null or contains no entries
      Since:
      5.0
    • notEmpty

      @Deprecated public static void notEmpty(@Nullable Map<?,?> map)
      Deprecated.
      as of 4.3.7, in favor of notEmpty(Map, String)
      Assert that a Map contains entries; that is, it must not be null and must contain at least one entry.
    • isInstanceOf

      public static void isInstanceOf(Class<?> type, @Nullable Object obj, String message)
      Assert that the provided object is an instance of the provided class.
      Assert.instanceOf(Foo.class, foo, "Foo expected");
      Parameters:
      type - the type to check against
      obj - the object to check
      message - a message which will be prepended to provide further context. If it is empty or ends in ":" or ";" or "," or ".", a full exception message will be appended. If it ends in a space, the name of the offending object's type will be appended. In any other case, a ":" with a space and the name of the offending object's type will be appended.
      Throws:
      IllegalArgumentException - if the object is not an instance of type
    • isInstanceOf

      public static void isInstanceOf(Class<?> type, @Nullable Object obj, Supplier<String> messageSupplier)
      Assert that the provided object is an instance of the provided class.
       Assert.instanceOf(Foo.class, foo, () -> "Processing " + Foo.class.getSimpleName() + ":");
       
      Parameters:
      type - the type to check against
      obj - the object to check
      messageSupplier - a supplier for the exception message to use if the assertion fails. See isInstanceOf(Class, Object, String) for details.
      Throws:
      IllegalArgumentException - if the object is not an instance of type
      Since:
      5.0
    • isInstanceOf

      public static void isInstanceOf(Class<?> type, @Nullable Object obj)
      Assert that the provided object is an instance of the provided class.
      Assert.instanceOf(Foo.class, foo);
      Parameters:
      type - the type to check against
      obj - the object to check
      Throws:
      IllegalArgumentException - if the object is not an instance of type
    • isAssignable

      public static void isAssignable(Class<?> superType, @Nullable Class<?> subType, String message)
      Assert that superType.isAssignableFrom(subType) is true.
      Assert.isAssignable(Number.class, myClass, "Number expected");
      Parameters:
      superType - the super type to check against
      subType - the sub type to check
      message - a message which will be prepended to provide further context. If it is empty or ends in ":" or ";" or "," or ".", a full exception message will be appended. If it ends in a space, the name of the offending sub type will be appended. In any other case, a ":" with a space and the name of the offending sub type will be appended.
      Throws:
      IllegalArgumentException - if the classes are not assignable
    • isAssignable

      public static void isAssignable(Class<?> superType, @Nullable Class<?> subType, Supplier<String> messageSupplier)
      Assert that superType.isAssignableFrom(subType) is true.
       Assert.isAssignable(Number.class, myClass, () -> "Processing " + myAttributeName + ":");
       
      Parameters:
      superType - the super type to check against
      subType - the sub type to check
      messageSupplier - a supplier for the exception message to use if the assertion fails. See isAssignable(Class, Class, String) for details.
      Throws:
      IllegalArgumentException - if the classes are not assignable
      Since:
      5.0
    • isAssignable

      public static void isAssignable(Class<?> superType, Class<?> subType)
      Assert that superType.isAssignableFrom(subType) is true.
      Assert.isAssignable(Number.class, myClass);
      Parameters:
      superType - the super type to check
      subType - the sub type to check
      Throws:
      IllegalArgumentException - if the classes are not assignable