All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fasterxml.jackson.databind.type.LogicalType Maven / Gradle / Ivy

package com.fasterxml.jackson.databind.type;

/**
 * Set of logical types (or type categories, classes of classes), used
 * for defining applicability of configuration like coercion configuration.
 * Used instead to allow easier targeting of types than having to enumerate
 * physical types ({@link java.lang.Class} or {@link com.fasterxml.jackson.databind.JavaType}).
 *
 * @since 2.12
 */
public enum LogicalType
{
    // // // General container types

    /**
     * Array types of other values.
     *

* Note: excludes binary type {@code byte[]}. */ Array, /** * {@link java.util.Collection} values (and "Collection-like" for JVM * languages and datatype libraries with semantically similar types) */ Collection, /** * {@link java.util.Map} values (and "Map-like" for JVM * languages and datatype libraries with semantically similar types) */ Map, // // // Other structured java types /** * Types that are handled by default "set of key/value pairs" serialization, * also known as "Beans". *

* In addition to user-defined types, also includes JDK types like: *

    *
  • {@link java.lang.Throwable} *
  • *
*/ POJO, /** * "Non-type", Type used to contained untyped, free-form content: maybe * a "Tree" (sometimes called "AST"), or buffer of some kind, * or even just nominal type of {@link java.lang.Object} */ Untyped, // // // Basic scalar types /** * Basic integral numbers types like {@code short}, {@code int}, {@code long} * and matching wrapper types, {@link java.math.BigInteger}. */ Integer, /** * Basic floating-point numbers types like {@code short}, {@code int}, {@code long} * and matching wrapper types, {@link java.math.BigInteger}. */ Float, /** * {@link java.lang.Boolean}, {@code boolean}, {@link java.util.concurrent.atomic.AtomicBoolean}. */ Boolean, /** * Various {@link java.lang.Enum} types. */ Enum, /** * Purely textual types, {@link java.lang.String} and similar (but not types that * are generally expressed as Strings in input). */ Textual, /** * Binary data such as {@code byte[]} and {@link java.nio.ByteBuffer}. */ Binary, /** * Date/time datatypes such as {@link java.util.Date}, {@link java.util.Calendar}. */ DateTime, /** * Scalar types other than ones listed above: includes types like {@link java.net.URL} * and {@link java.util.UUID}. */ OtherScalar ; /** * Helper method to use for figuring out logical type from physical type, * in cases where caller wants a guess. Note that introspection is * not exhaustive and mostly covers basic {@link java.util.Collection}, * {@link java.util.Map} and {@link java.lang.Enum} cases; but not * more specific types (for example datatype-provided extension types). * * @param raw Type-erased class to classify * @param defaultIfNotRecognized if no type recognized, value to return * (for example, {@code null}) */ public static LogicalType fromClass(Class raw, LogicalType defaultIfNotRecognized) { if (raw.isEnum()) { return Enum; } if (raw.isArray()) { if (raw == byte[].class) { return Binary; } return Array; } if (java.util.Collection.class.isAssignableFrom(raw)) { return Collection; } if (java.util.Map.class.isAssignableFrom(raw)) { return Map; } if (raw == String.class) { return Textual; } return defaultIfNotRecognized; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy