クラス KeyFactory
java.lang.ObjectSE
org.springframework.cglib.core.KeyFactory
マップやセットなどで使用するために、複数値のキーを処理するクラスを生成します。
equals
および hashCode
メソッドのコードは、JoshuaBloch によって EffectiveJava で規定されたルールに従います。KeyFactory
を生成するには、キーの構造を説明するインターフェースを提供する必要があります。インターフェースには、Object
を返す newInstance
という名前の単一のメソッドが必要です。引数配列は何の --Objects、プリミティブ値、いずれかの単一またはマルチ次元配列とすることができます。例:
private interface IntStringKey { public Object newInstance(int i, String s); }
KeyFactory
を作成したら、インターフェースで定義された newInstance
メソッドを呼び出して新しいキーを生成します。
IntStringKey factory = (IntStringKey)KeyFactory.create(IntStringKey.class); Object key1 = factory.newInstance(4, "Hello"); Object key2 = factory.newInstance(4, "World");
注 :2 つのキー key1
と key2
の間の hashCode
の同等性は、key1.equals(key2)
とキーが同じファクトリで製造された場合にのみ保証されます。
ネストされたクラスのサマリー
フィールドサマリー
修飾子と型フィールド説明static final Customizer
static final HashCodeCustomizer
Type.hashCode()
は、記述子全体を走査してハッシュコードを計算するため、非常に高負荷です。static final Customizer
使用すべきではありません。このカスタマイザは、キーオブジェクトが引き続きオブジェクトとクラスへの強い参照を保持しているため、予期しないクラスリークが発生する可能性があります。static final FieldTypeCustomizer
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明static KeyFactory
static KeyFactory
create
(ClassLoaderSE loader, ClassSE keyInterface, Customizer customizer) static KeyFactory
create
(ClassLoaderSE loader, ClassSE keyInterface, KeyFactoryCustomizer customizer, ListSE<KeyFactoryCustomizer> next) static KeyFactory
create
(ClassSE keyInterface, Customizer customizer) static KeyFactory
create
(ClassSE keyInterface, KeyFactoryCustomizer first, ListSE<KeyFactoryCustomizer> next)
フィールドの詳細
CLASS_BY_NAME
STORE_CLASS_AS_STRING
HASH_ASM_TYPE
Type.hashCode()
は、ハッシュコードを計算するために完全な記述子をトラバースするため、非常に高負荷です。このカスタマイザーは、ハッシュコードとしてType.getSort()
を使用します。OBJECT_BY_CLASS
使用すべきではありません。キーオブジェクトはオブジェクトとクラスへの強い参照を保持しているため、このカスタマイザーは予期しないクラスリークを引き起こす可能性があります。オブジェクトを取り除き、クラスを文字列として表す前処理メソッドを用意することをお勧めします
コンストラクターの詳細
KeyFactory
protected KeyFactory()
メソッドの詳細
create
create
create
public static KeyFactory create(ClassSE keyInterface, KeyFactoryCustomizer first, ListSE<KeyFactoryCustomizer> next) create
create
public static KeyFactory create(ClassLoaderSE loader, ClassSE keyInterface, KeyFactoryCustomizer customizer, ListSE<KeyFactoryCustomizer> next)