ho avuto una prova di colloquio e ha visto il seguente codice:Valore generico Java. <SomeValue>
EDIT:
public class TestValue {
private Value<SomeValue> defaultValue;
@Test
public void Empty_Value_Has_No_Value() {
Assert.assertFalse(Value.<SomeValue> createEmptyValue()
.hasValue());
}
@Test
public void Default_Value_IsEmpty() {
Assert.assertEquals(Value.<SomeValue> createEmptyValue(),
defaultValue);
}
@Test
public void Non_Empty_Value_Has_Value() {
Assert.assertTrue(new Value<SomeValue>(true, new SomeValue())
.hasValue());
}
}
Non avevo mai visto Java generico come
Value.<SomeValue>
Il test è quello di implementare classe di valore con il dato codice di test unitario sopra.
ho cercato di capire la firma del metodo valore al di sotto (necessità di implementazione):
public interface Value<T> {
public boolean hasValue();
public Value<T> createEmptyValue();
}
Uno sa, si prega di aiuto?
Grazie
EDIT: dovrebbe essere così in base alle risposte qui sotto @marlon
public class Value<T> {
public boolean hasValue(){}
public static <M> Value<M> createEmptyValue(){}; //need <M>
}
La sintassi chiave per sapere:
Value.<SomeValue> //ClassName.<Type>method
è modo per richiamare il metodo statico di una classe con argomento parametrizzato.
MODIFICA: in base a @ snipes83, sintassi per richiamare il metodo non statico di una classe con argomento parametrizzato.
SomeObject.<Type>method
potrebbe essere un errore di battitura? 'Il valore .createEmptyValue()' ha più senso. –
Snps
Era una codifica della lavagna? Forse è solo un riferimento a un tipo che può essere qualsiasi cosa per definizione, nel senso che fornisce un valore di quel tipo, ma il tipo non ha molta importanza? Questo è quello che assumerei in questo caso. – clement
Sì; tipo di curioso me stesso. –