Jackson Data Binding Source Code

Jackson is "the Java JSON library" or "the best JSON parser for Java". Or simply as "JSON for Java".

  • Jackson Data Binding module allows you to converts JSON to and from POJO (Plain Old Java Object) using property accessor or using annotations.
  • Jackson Databind Source Code files are provided in the source packge (jackson-databind-2.12.4-sources.jar). You can download it at Jackson Maven Website.

    You can also browse Jackson Databind Source Code below:

    ✍: FYIcenter.com

    com/fasterxml/jackson/databind/type/ClassKey.java

    package com.fasterxml.jackson.databind.type;
    
    /**
     * Key class, used as an efficient and accurate key
     * for locating per-class values, such as
     * {@link com.fasterxml.jackson.databind.JsonSerializer}s.
     *<p>
     * The reason for having a separate key class instead of
     * directly using {@link Class} as key is mostly
     * to allow for redefining <code>hashCode</code> method --
     * for some strange reason, {@link Class} does not
     * redefine {@link Object#hashCode} and thus uses identity
     * hash, which is pretty slow. This makes key access using
     * {@link Class} unnecessarily slow.
     *<p>
     * Note: since class is not strictly immutable, caller must
     * know what it is doing, if changing field values.
     */
    public final class ClassKey
        implements Comparable<ClassKey>,
            java.io.Serializable // since 2.1
    {
        private static final long serialVersionUID = 1L;
    
        private String _className;
    
        private Class<?> _class;
    
        /**
         * Let's cache hash code straight away, since we are
         * almost certain to need it.
         */
        private int _hashCode;
    
        public ClassKey() 
        {
            _class = null;
            _className = null;
            _hashCode = 0;
        }
    
        public ClassKey(Class<?> clz)
        {
            _class = clz;
            _className = clz.getName();
            _hashCode = _className.hashCode();
        }
    
        public void reset(Class<?> clz)
        {
            _class = clz;
            _className = clz.getName();
            _hashCode = _className.hashCode();
        }
    
        /*
        /**********************************************************
        /* Comparable
        /**********************************************************
         */
    
        @Override
        public int compareTo(ClassKey other)
        {
            // Just need to sort by name, ok to collide (unless used in TreeMap/Set!)
            return _className.compareTo(other._className);
        }
    
        /*
        /**********************************************************
        /* Standard methods
        /**********************************************************
         */
    
        @Override
            public boolean equals(Object o)
        {
            if (o == this) return true;
            if (o == null) return false;
            if (o.getClass() != getClass()) return false;
            ClassKey other = (ClassKey) o;
    
            /* Is it possible to have different Class object for same name + class loader combo?
             * Let's assume answer is no: if this is wrong, will need to uncomment following functionality
             */
            /*
            return (other._className.equals(_className))
                && (other._class.getClassLoader() == _class.getClassLoader());
            */
            return other._class == _class;
        }
    
        @Override public int hashCode() { return _hashCode; }
    
        @Override public String toString() { return _className; }
        
    }
    

    com/fasterxml/jackson/databind/type/ClassKey.java

     

    ⇒ Jackson Annotations Source Code

    ⇐ Download and Install Jackson Binary Package

    ⇑ Downloading and Reviewing jackson-*.jar

    ⇑⇑ Jackson - Java JSON library

    2022-03-29, 31864👍, 0💬