Ho appena scritto un semplice JUnit Matcher
per assertThat()
che richiede Generics, naturalmente.Perché è `<T> Type` come tipo restituito in Java Generics e non` Tipo <T> `?
Con un po 'di fortuna ho trovato la sintassi giusta per il tipo ritorno di static <T>Matcher not(Matcher<T> m)...
, anche se non capisco perché
- nel tipo ritorno sua
<T>Matcher
e - nel lista degli argomenti sua
Matcher<T>
Perché è <T>Matcher
nel tipo di reso? Qual è il concetto alla base di questo?
Provengo dal C++ e posso gestire i suoi modelli piuttosto bene. So che il Generics funziona in modo diverso, ma questo è il motivo per cui mi confonde.
Ecco la mia classe Matcher
. Guarda l'helper statica 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 ... */
}
Suggerimento: aggiungere uno spazio tra '' e 'Matcher'. –
@SotiriosDelimanolis perché? Mi aiuta ad afferrare il concetto che sta dietro? – towi
Sì, esattamente. Questo non è un tipo di ritorno. Sono due cose separate. http://docs.oracle.com/javase/tutorial/extra/generics/methods.html –