Ich schrieb gerade eine einfache JUnit Matcher
für assertThat()
, die Generics erfordert, natürlich.Warum ist es `<T> Type` als Rückgabetyp in Java Generics und nicht` Type <T> `?
Mit etwas Glück fand ich die richtige Syntax für den Rückgabetyp von static <T>Matcher not(Matcher<T> m)...
, obwohl ich verstehe nicht, warum
- im Rückgabetyp seine
<T>Matcher
und - in der Argumentliste seine
Matcher<T>
Warum ist es <T>Matcher
im Rückgabetyp? Was ist das Konzept dahinter?
Ich komme aus C++ und kann seine Vorlagen dort ziemlich gut behandeln. Ich weiß, dass Generics anders arbeiten, aber das ist, warum das für mich verwirrend ist.
Hier ist meine eigene Matcher
Klasse. Schauen Sie sich die statische Hilfs 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 ... */
}
Hinweis: Fügen Sie ein Leerzeichen zwischen '' und 'Matcher' hinzu. –
@StiriosDelimanolis warum? Hilft es mir, das dahinter stehende Konzept in den Griff zu bekommen? – towi
Ja, genau. Das ist kein Rückgabetyp. Es sind zwei getrennte Dinge. http://docs.oracle.com/javase/tutorial/extra/generics/methods.html –