Właśnie napisałem prostą JUnit Matcher
dla assertThat()
, która wymaga oczywiście Generics.Dlaczego to jest `<T> Typ` jako typ zwracany w języku Java Generics, a nie `Type <T>`?
Dzięki odrobinie szczęścia znalazłem właściwą składnię typu powrotnej z static <T>Matcher not(Matcher<T> m)...
, chociaż ja nie rozumiem, dlaczego
- w rodzaju powrotnej jego
<T>Matcher
i - w lista argumentów jego
Matcher<T>
Dlaczego w typie zwracanym jest <T>Matcher
? Jaka jest koncepcja tego rozwiązania?
Pochodzę z C++ i mogę obsługiwać jego Szablony tam całkiem dobrze. Wiem, że Generics działa inaczej, ale właśnie dlatego jest to mylące dla mnie.
Oto moja własna klasa Matcher
. Spójrz na statycznych pomocnika not
:
import org.hamcrest.*;
/** assertThat(result, not(hasItem("Something"))); */
class NotMatcher<T> extends BaseMatcher<T> {
/** construction helper factory */
static <T>Matcher not(Matcher<T> m) { //< '<T>Matcher' ???
return new NotMatcher<T>(m);
}
/** constructor */
NotMatcher(Matcher<T> m) { /* ... */ }
/* ... more methods ... */
}
Wskazówka: Dodaj spację między '' a 'Matcher'. –
@SotiriosDelimanolis dlaczego? Czy pomaga mi to uchwycić koncepcję, która za tym stoi? – towi
Tak, dokładnie. To nie jest typ zwrotu. To dwie oddzielne rzeczy. http://docs.oracle.com/javase/tutorial/extra/generics/methods.html –