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

org.codehaus.jackson.map.ser.ClassKey Maven / Gradle / Ivy

Go to download

Data Mapper package is a high-performance data binding package built on Jackson JSON processor

There is a newer version: 1.9.13
Show newest version
package org.codehaus.jackson.map.ser;

/**
 * Key class, used as an efficient and accurate key
 * for locating per-class values, such as
 * {@link org.codehaus.jackson.map.JsonSerializer}s.
 *

* The reason for having a separate key class instead of * directly using {@link Class} as key is mostly * to allow for redefining hashCode 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. *

* Note: since class is not strictly immutable, caller must * know what it is doing, if changing field values. */ public final class ClassKey implements Comparable { String _className; Class _class; /** * Let's cache hash code straight away, since we are * almost certain to need it. */ int _hashCode; public ClassKey() { _class = null; _className = null; _hashCode = 0; } public ClassKey(Class clz) { _class = clz; _className = clz.getName(); _hashCode = _className.hashCode(); } protected void reset(Class clz) { _class = clz; _className = clz.getName(); _hashCode = _className.hashCode(); } /* ////////////////////////////////////////////////// // Comparable ////////////////////////////////////////////////// */ public int compareTo(ClassKey other) { // Just need to sort by name, ok to collide 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; /* 09-Dec-2008, tatu: Hmmh. 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; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy