    001    /*****************************************************************************
    002     * Copyright (C) PicoContainer Committers. All rights reserved.            *
    003     * ------------------------------------------------------------------------- *
    004     * The software in this package is published under the terms of the BSD      *
    005     * style license a copy of which has been included with this distribution in *
    006     * the LICENSE.txt file.                                                     *
    007     *                                                                           *
    008     * Original code by Joerg Schaibe                                            *
    009     *****************************************************************************/
    010    package org.picocontainer;
    011
    012    import java.io.Serializable;
    013    import java.lang.annotation.Annotation;
    014
    015    /** @author Paul Hammant */
    016    @SuppressWarnings("serial")
    017    public class BindKey<T> implements Serializable {
    018
    019
    020            private final Class<T> type;
    021        private final Class<? extends Annotation> annotation;
    022
    023        public BindKey(Class<T> type, Class<? extends Annotation> annotation) {
    024            this.type = type;
    025            this.annotation = annotation;
    026        }
    027
    028        public Class<T> getType() {
    029            return type;
    030        }
    031
    032        public Class<? extends Annotation> getAnnotation() {
    033            return annotation;
    034        }
    035
    036        public String toString() {
    037            return type.getName() + ":" + annotation.getName();
    038        }
    039
    040        public boolean equals(Object o) {
    041            if (this == o) return true;
    042            if (o == null || getClass() != o.getClass()) return false;
    043
    044            BindKey<?> bindKey = (BindKey<?>)o;
    045
    046            if (!annotation.equals(bindKey.annotation)) return false;
    047            if (!type.equals(bindKey.type)) return false;
    048
    049            return true;
    050        }
    051
    052        public int hashCode() {
    053            int result;
    054            result = type.hashCode();
    055            result = 31 * result + annotation.hashCode();
    056            return result;
    057        }
    058
    059        public static <T> BindKey<T> bindKey(Class<T> type, Class<? extends Annotation> annotation) {
    060            return new BindKey<T>(type, annotation);
    061        }
    062
    063    }