2013-05-10 12 views
11

Próbuję użyć wzorca konstruktora z generics, ale nie wiem jak to razem. Potrzebowałbym pomocy i wyjaśnienia poprawnej składni. Mój kod i to, co próbowałem.Jak używać generycznych w wzorzec konstruktora

public class LanguageMatcher<T, S> { 

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

     // Code 
    } 
} 

Usage (Error): 

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

spróbować tego: 'nowy LanguageMatcher.Builder ();' – hoaz

+3

Funny otrzymywać głosowanie nad takim pytaniem. " – LuckyLuke

+1

@LuckyLuke nawet SO nie jest bezpieczny od trolli:/ – A4L

Odpowiedz

10

Parametry typu nie są dziedziczone z klasy zewnętrznej klasy zewnętrznej do statycznej. Tak więc Builder<T, S> ma w rzeczywistości inny T i S niż LanguageMatcher.

Dzięki temu nie potrzebujesz parametrów typu podczas próby zakwalifikowania Builder z LanguageMatcher. A ponieważ klasa Builder jest static, nie trzeba instancję LanguageMatcher do instancji Builder:

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

Ah, miło. Dziękuję :) – LuckyLuke

+0

Jedna rzecz: klasa LanguageMatcher jest ogólna, ponieważ implementuje ogólny interfejs (nie pokazano wcześniejszego kodu). Czy muszę zajmować się tym w szczególny sposób? Mam na myśli, czy T i S są kiedykolwiek ustawione na LanguageMatcher kiedy przekazuję obiekt konstruktora do prywatnego konstruktora? – LuckyLuke

+0

W swoim prywatnym konstruktorze jako parametr można użyć parametru 'Builder '. W ten sposób możesz stworzyć 'LanguageMatcher ' z 'Builder '. Kompilator Java wnioskuje ogólne parametry typu z ogólnych parametrów typu obiektu 'Builder'. – rgettman

Powiązane problemy