2012-12-21 13 views
9

Próbuję użyć ogólnej metody, więc nie muszę powtarzać kodu. Próbowałem:Ogólna metoda w nietypowej klasie

private Listener createListenerAdapter(Class<T> clazz) 
{ 
    // do something 
} 

(clazz jest ważne, ponieważ class jest zarezerwowane).

Ale Netbeans narzeka, że: "Nie można znaleźć symbolu klasy T".

Będę przechodzić w kilku różnych klasach, które mają na nich te same metody. Gdzie mam zdefiniować T?

Odpowiedz

27

stwierdzenie metody jak:

private <T> Listener createListenerAdapter(Class<T> clazz) 

Patrz Java Tutorials aby uzyskać więcej informacji.

Edit: Jeśli T nie jest powiązany z typem powrotnej można też po prostu użyć symbolu wieloznacznego:

private Listener createListenerAdapter(Class<?> clazz) 

Edycja 1: Jeśli clazz ma stanowić rodzaj Listener, ty mógłby określić granice w celu ograniczenia rozmówcę (aby uniknąć odlewane i potencjalnych wyjątków uruchomieniowe):

private <L extends Listener> L createListenerAdapter(Class<L> clazz) 

Albo z zamiennika:

private Listener createListenerAdapter(Class<? extends Listener> clazz) 

Ale to zależy od tego, w jaki sposób clazz jest używane w ciele.

+0

+1 Dziękuję .. Java jest trochę zardzewiała. –

+0

'clazz' to widget GUI w GWT. –

+0

Okay, więc prawdopodobnie "Klasa 'jest najlepiej pasuje. –

3

ogólne deklaracje mogą być również wykonane w metodzie poziomie przez parametryzacji je tak:

private <T> Listener createListenerAdapter(Class<T> clazz) 
{ 
    // do something 
} 
0

Jeśli nie używasz typ (mało prawdopodobne, ale można próbować uniknąć surowe ostrzeżenie typ) :

Powiązane problemy