Package net.sf.cglib.core
Class KeyFactory
- java.lang.Object
-
- net.sf.cglib.core.KeyFactory
-
public abstract class KeyFactory extends java.lang.ObjectGenerates classes to handle multi-valued keys, for use in things such as Maps and Sets. Code forequalsandhashCodemethods follow the the rules laid out in Effective Java by Joshua Bloch.To generate a
KeyFactory, you need to supply an interface which describes the structure of the key. The interface should have a single method namednewInstance, which returns anObject. The arguments array can be anything--Objects, primitive values, or single or multi-dimension arrays of either. For example:private interface IntStringKey { public Object newInstance(int i, String s); }Once you have made a
KeyFactory, you generate a new key by calling thenewInstancemethod defined by your interface.IntStringKey factory = (IntStringKey)KeyFactory.create(IntStringKey.class); Object key1 = factory.newInstance(4, "Hello"); Object key2 = factory.newInstance(4, "World");Note:
hashCodeequality between two keyskey1andkey2is only guaranteed ifkey1.equals(key2)and the keys were produced by the same factory.- Version:
- $Id: KeyFactory.java,v 1.26 2006/03/05 02:43:19 herbyderby Exp $
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classKeyFactory.Generator
-
Field Summary
Fields Modifier and Type Field Description static CustomizerCLASS_BY_NAMEstatic HashCodeCustomizerHASH_ASM_TYPEType.hashCode()is very expensive as it traverses full descriptor to calculate hash code.static CustomizerOBJECT_BY_CLASSDeprecated.this customizer might result in unexpected class leak since key object still holds a strong reference to the Object and class.static FieldTypeCustomizerSTORE_CLASS_AS_STRING
-
Constructor Summary
Constructors Modifier Constructor Description protectedKeyFactory()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static KeyFactorycreate(java.lang.Class keyInterface)static KeyFactorycreate(java.lang.ClassLoader loader, java.lang.Class keyInterface, Customizer customizer)static KeyFactorycreate(java.lang.ClassLoader loader, java.lang.Class keyInterface, KeyFactoryCustomizer customizer, java.util.List<KeyFactoryCustomizer> next)static KeyFactorycreate(java.lang.Class keyInterface, Customizer customizer)static KeyFactorycreate(java.lang.Class keyInterface, KeyFactoryCustomizer first, java.util.List<KeyFactoryCustomizer> next)
-
-
-
Field Detail
-
CLASS_BY_NAME
public static final Customizer CLASS_BY_NAME
-
STORE_CLASS_AS_STRING
public static final FieldTypeCustomizer STORE_CLASS_AS_STRING
-
HASH_ASM_TYPE
public static final HashCodeCustomizer HASH_ASM_TYPE
Type.hashCode()is very expensive as it traverses full descriptor to calculate hash code. This customizer usesType.getSort()as a hash code.
-
OBJECT_BY_CLASS
@Deprecated public static final Customizer OBJECT_BY_CLASS
Deprecated.this customizer might result in unexpected class leak since key object still holds a strong reference to the Object and class. It is recommended to have pre-processing method that would strip Objects and represent Classes as Strings
-
-
Method Detail
-
create
public static KeyFactory create(java.lang.Class keyInterface)
-
create
public static KeyFactory create(java.lang.Class keyInterface, Customizer customizer)
-
create
public static KeyFactory create(java.lang.Class keyInterface, KeyFactoryCustomizer first, java.util.List<KeyFactoryCustomizer> next)
-
create
public static KeyFactory create(java.lang.ClassLoader loader, java.lang.Class keyInterface, Customizer customizer)
-
create
public static KeyFactory create(java.lang.ClassLoader loader, java.lang.Class keyInterface, KeyFactoryCustomizer customizer, java.util.List<KeyFactoryCustomizer> next)
-
-