Ich hatte ein Interview Test und sah den folgenden Code:Java Generics Wert. <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());
}
}
Ich hatte wie nie gesehen Java Generika
Value.<SomeValue>
Der Test ist Wert Klasse mit der zur Umsetzung gegebener Unit Test Code oben.
Ich versuchte, den Wert Methode Unterschrift, um herauszufinden (Implementierung benötigen):
public interface Value<T> {
public boolean hasValue();
public Value<T> createEmptyValue();
}
Jeder weiß, bitte helfen?
Danke
EDIT: Sollte so sein nach Antworten unter @marlon
public class Value<T> {
public boolean hasValue(){}
public static <M> Value<M> createEmptyValue(){}; //need <M>
}
Der Schlüssel Syntax wissen:
Value.<SomeValue> //ClassName.<Type>method
ist Art und Weise statische Methode einer aufzurufen Klasse mit parametrisiertem Argument.
EDIT: nach @ snipes83, Syntax, um nicht-statische Methode einer Klasse mit parametrisierten Argument aufrufen.
SomeObject.<Type>method
Es ist ein Tippfehler sein könnte? 'Wert .createEmptyValue()' macht mehr Sinn. –
Snps
War das eine Whiteboard-Codierung? Vielleicht ist es nur ein Verweis auf einen Typ, der per Definition alles sein kann, nur bedeutet, dass sie einen Wert dieses Typs bereitstellen, aber der Typ ist nicht wirklich wichtig? Das würde ich in diesem Fall annehmen. – clement
Ja; irgendwie neugierig. –