public <KEY, ITEM> Repo<KEY, ITEM> build( Class<?> primitiveKey, Class<KEY> key, Class<ITEM> clazz, Class<?>... classes ) {

        /* Initialize factories. */
        initializeTheFactories();


        /* Reflect and load all of the fields. */
        loadFields( clazz, classes );

        this.itemClass = clazz;



        /* Construct */
        this.repo = this.repoComposerFactory.get();
        this.editor = constructObjectEditor( fields );
        SearchableCollectionComposer query = constructSearchableCollection( primitiveKey, clazz, repo, fields );
        query.setRemoveDuplication( this.removeDuplication );

        /* Inject */
        repo.setSearchableCollection( ( SearchableCollection<KEY, ITEM> ) query );
        ( ( ObjectEditorComposer ) editor ).setSearchableCollection( ( SearchableCollection<KEY, ITEM> ) query );

        editor = decorateEditor( editor );
        repo.setObjectEditor( ( ObjectEditor ) editor );

        return ( Repo<KEY, ITEM> ) repo;
    }
public < KEY , ITEM > Repo < KEY , ITEM > build ( Class < ? > primitiveKey , Class < KEY > key , Class < ITEM > clazz , Class < ? > ... classes ) { initializeTheFactories ( ) ; loadFields ( clazz , classes ) ; this . itemClass = clazz ; this . repo = this . repoComposerFactory . get ( ) ; this . editor = constructObjectEditor ( fields ) ; SearchableCollectionComposer query = constructSearchableCollection ( primitiveKey , clazz , repo , fields ) ; query . setRemoveDuplication ( this . removeDuplication ) ; repo . setSearchableCollection ( ( SearchableCollection < KEY , ITEM > ) query ) ; ( ( ObjectEditorComposer ) editor ) . setSearchableCollection ( ( SearchableCollection < KEY , ITEM > ) query ) ; editor = decorateEditor ( editor ) ; repo . setObjectEditor ( ( ObjectEditor ) editor ) ; return ( Repo < KEY , ITEM > ) repo ; }
@param primitiveKey
@param key
@param clazz
@param classes
@param <KEY>
@param <ITEM>
@return