package org.test4j.tools.generic; import java.lang.reflect.TypeVariable; /** * 泛型声明变量定位 * * @author darui.wudr 2013-10-30 上午11:28:54 */ @SuppressWarnings("rawtypes") public class GenericTypeKey { private final String clazName; private final String simpleClazName; private final String genericName; public GenericTypeKey(Class claz, String genericName) { this.clazName = claz.getName(); this.simpleClazName = claz.getSimpleName(); this.genericName = genericName; } public GenericTypeKey(String claz, String genericName) { this.clazName = claz; this.simpleClazName = claz.substring(claz.lastIndexOf('.') + 1); this.genericName = genericName; } public GenericTypeKey(TypeVariable typeVariable) { this((Class) typeVariable.getGenericDeclaration(), typeVariable.getName()); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((clazName == null) ? 0 : clazName.hashCode()); result = prime * result + ((genericName == null) ? 0 : genericName.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; GenericTypeKey other = (GenericTypeKey) obj; if (clazName == null) { if (other.clazName != null) return false; } else if (!clazName.equals(other.clazName)) return false; if (genericName == null) { if (other.genericName != null) return false; } else if (!genericName.equals(other.genericName)) return false; return true; } @Override public String toString() { return simpleClazName + "<" + genericName + ">"; } }