2013-05-10 9 views
11

Ich versuche, das Builder-Muster mit Generika zu verwenden, aber ich weiß nicht, wie man es zusammensetzt. Ich brauche Hilfe und eine Erklärung der korrekten Syntax. Mein Code und was ich versucht habe.Wie Generika in Builder-Muster verwenden

public class LanguageMatcher<T, S> { 

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

     // Code 
    } 
} 

Usage (Error): 

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

versuchen diese: 'neue LanguageMatcher.Builder ();' – hoaz

+3

Lustig zu empfangen ein Downvote zu einer Frage wie dieser. ' – LuckyLuke

+1

@LuckyLuke nicht einmal SO ist sicher vor Trolle:/ – A4L

Antwort

10

Typparameter werden nicht von der äußeren Klasse in die statische verschachtelte Klasse übernommen. So Builder<T, S> hat tatsächlich eine andere T und S als LanguageMatcher.

Sie brauchen also keine Typparameter, wenn Sie versuchen, Builder mit LanguageMatcher zu qualifizieren. Und weil die Builder Klasse ist static, die Sie nicht eine Instanz von LanguageMatcher brauchen eine Builder zu instanziiert:

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

Ah, schön. Danke :) – LuckyLuke

+0

Eine Sache jedoch: Die LanguageMatcher-Klasse ist generisch, weil sie eine generische Schnittstelle implementiert (nicht früher Code gezeigt). Muss ich auf besondere Weise damit umgehen? Ich meine, werden T und S jemals auf LanguageMatcher festgelegt, wenn ich das Builder-Objekt an den privaten Konstruktor übergebe? – LuckyLuke

+0

In Ihrem privaten Konstruktor können Sie als Parameter einen 'Builder ' verwenden. Auf diese Weise können Sie einen 'LanguageMatcher ' mit einem 'Builder ' erstellen. Der Java-Compiler wird die generischen Typparameter aus den generischen Typparametern des Builder-Objekts ableiten. – rgettman