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

com.fasterxml.classmate.util.ClassKey Maven / Gradle / Ivy

Go to download

Library for introspecting types with full generic information including resolving of field and method types.

There is a newer version: 1.7.0
Show newest version
package com.fasterxml.classmate.util;

import java.io.Serializable;

/**
 * Helper class used as key when we need efficient Class-to-value lookups.
 */
@SuppressWarnings("serial")
public class ClassKey
    implements Comparable, Serializable
{
    private final String _className;

    private final Class _class;

    /**
     * Let's cache hash code straight away, since we are almost certain to need it.
     */
    private final int _hashCode;

    public ClassKey(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; }
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy