net.sf.cglib.core

Class KeyFactory


public abstract class KeyFactory
extends java.lang.Object

Generates classes to handle multi-valued keys, for use in things such as Maps and Sets. Code for equals and hashCode methods 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 named newInstance, which returns an Object. 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 the newInstance method defined by your interface.

     IntStringKey factory = (IntStringKey)KeyFactory.create(IntStringKey.class);
     Object key1 = factory.newInstance(4, "Hello");
     Object key2 = factory.newInstance(4, "World");
 

Note: hashCode equality between two keys key1 and key2 is only guaranteed if key1.equals(key2) and the keys were produced by the same factory.

Version:
$Id: KeyFactory.java,v 1.24 2004/09/18 21:22:22 herbyderby Exp $

Nested Class Summary

static class
KeyFactory.Generator

Field Summary

static Customizer
CLASS_BY_NAME
static Customizer
OBJECT_BY_CLASS

Method Summary

static KeyFactory
create(Class keyInterface)
static KeyFactory
create(Class keyInterface, Customizer customizer)
static KeyFactory
create(ClassLoader loader, Class keyInterface, Customizer customizer)

Field Details

CLASS_BY_NAME

public static final Customizer CLASS_BY_NAME

OBJECT_BY_CLASS

public static final Customizer OBJECT_BY_CLASS

Method Details

create

public static KeyFactory create(Class keyInterface)

create

public static KeyFactory create(Class keyInterface,
                                Customizer customizer)

create

public static KeyFactory create(ClassLoader loader,
                                Class keyInterface,
                                Customizer customizer)

Copyright (c) 2001 - Apache Software Foundation