Class ArbitraryInstances

java.lang.Object
com.google.common.testing.ArbitraryInstances

public final class ArbitraryInstances extends Object
Supplies an arbitrary "default" instance for a wide range of types, often useful in testing utilities.

Covers arrays, enums and common types defined in java.lang, java.lang.reflect, java.io, java.nio, java.math, java.util, java.util.concurrent, java.util.regex, com.google.common.base, com.google.common.collect and com.google.common.primitives. In addition, if the type exposes at least one public static final constant of the same type, one of the constants will be used; or if the class exposes a public parameter-less constructor then it will be "new"d and returned.

All default instances returned by get(java.lang.Class<T>) are generics-safe. Clients won't get type errors for using get(Comparator.class) as a Comparator<Foo>, for example. Immutable empty instances are returned for collection types; "" for string; 0 for number types; reasonable default instance for other stateless types. For mutable types, a fresh instance is created each time get() is called.

Since:
12.0
  • Field Details

    • BY_FIELD_NAME

      private static final Ordering<Field> BY_FIELD_NAME
    • DEFAULTS

      private static final ClassToInstanceMap<Object> DEFAULTS
    • implementations

      private static final ConcurrentMap<Class<?>,Class<?>> implementations
      type → implementation. Inherently mutable interfaces and abstract classes are mapped to their default implementations and are "new"d upon get().
    • logger

      private static final Logger logger
  • Constructor Details

    • ArbitraryInstances

      private ArbitraryInstances()
  • Method Details

    • createMatchResult

      private static MatchResult createMatchResult()
      Returns a new MatchResult that corresponds to a successful match. Apache Harmony (used in Android) requires a successful match in order to generate a MatchResult: https://cs.android.com/android/platform/superproject/+/android-2.3.7_r1:libcore/luni/src/main/java/java/util/regex/Matcher.java;l=550;drc=5850271b4ab93ebc27c1d49169a348c6be3c7f04
    • setImplementation

      private static <T> void setImplementation(Class<T> type, Class<? extends T> implementation)
    • getImplementation

      private static <T> Class<? extends T> getImplementation(Class<T> type)
    • get

      public static <T> T get(Class<T> type)
      Returns an arbitrary instance for type, or null if no arbitrary instance can be determined.
    • arbitraryConstantInstanceOrNull

      private static <T> T arbitraryConstantInstanceOrNull(Class<T> type)
    • createEmptyArray

      private static <T> T createEmptyArray(Class<T> arrayType)