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 }