2013-05-10 7 views
11

Sto cercando di utilizzare il modello di generatore con generici ma non so come metterlo insieme. Avrei bisogno di aiuto e una spiegazione della sintassi corretta. Il mio codice e quello che ho provatoCome utilizzare i generici nel modello di build

public class LanguageMatcher<T, S> { 

    // Code 
    public final static class Builder<T, S> { 

     // Code 
    } 
} 

Usage (Error): 

new LanguageMatcher<MyClass, YourClass>().Builder<MyClass, YourClass>().... 
+0

provare questo: 'nuova LanguageMatcher.Builder ();' – hoaz

+3

divertente per ricevere un downvote su una domanda come questa ». – LuckyLuke

+1

@LuckyLuke nemmeno SO è al sicuro dai troll:/ – A4L

risposta

10

I parametri di tipo non vengono ereditati dalla classe esterna alla classe nidificata statica. Quindi Builder<T, S> ha effettivamente un diverso T e S rispetto a LanguageMatcher.

Quindi non è necessario digitare i parametri quando si tenta di qualificare Builder con LanguageMatcher. E perché la classe Builder è static, non hai bisogno di un'istanza di LanguageMatcher creare un'istanza di un Builder:

LanguageMatcher.Builder<MyClass, YourClass> lm = 
    new LanguageMatcher.Builder<MyClass, YourClass>(); 
+0

Ah, bello. Grazie :) – LuckyLuke

+0

Una cosa però: la classe LanguageMatcher è generica perché implementa un'interfaccia generica (non mostrata codice precedente). Devo occuparmene in un modo speciale? Voglio dire, T e S vengono mai impostati su LanguageMatcher quando passo l'oggetto del costruttore al costruttore privato? – LuckyLuke

+0

Nel tuo costruttore privato, puoi prendere come parametro un 'Builder '. In questo modo, puoi creare un 'LanguageMatcher ' con un 'Builder '. Il compilatore Java dedurrà i parametri di tipo generico dai parametri di tipo generico dell'oggetto 'Builder'. – rgettman

Problemi correlati