我进行了面试测试并看到以下代码:
编辑:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
我从来没有见过Java泛型
Value.<SomeValue>
Run Code Online (Sandbox Code Playgroud)
测试是使用上面给定的单元测试代码实现Value类.
我试图找出下面的Value方法签名(需要实现):
public interface Value<T> {
public boolean hasValue();
public Value<T> createEmptyValue();
}
Run Code Online (Sandbox Code Playgroud)
有谁知道,请帮帮忙?
谢谢
编辑:根据@marlon下面的答案应该是这样的
public class Value<T> {
public boolean hasValue(){}
public static <M> Value<M> createEmptyValue(){}; //need <M>
}
Run Code Online (Sandbox Code Playgroud)
要知道的关键语法:
Value.<SomeValue> //ClassName.<Type>method
Run Code Online (Sandbox Code Playgroud)
是使用参数化参数调用类的静态方法的方法.
编辑:根据@ snipes83,语法调用带参数化参数的类的非静态方法.
SomeObject.<Type>method
Run Code Online (Sandbox Code Playgroud)
Value.<SomeValue>
这是方法表示泛型的方式.
以Google Guava Optional
为例:
Optional<String> email = Optional.<String>of(strEmail);
Run Code Online (Sandbox Code Playgroud)
由于接口不能声明静态方法(对java很遗憾),只需将方法声明为静态并忘记接口,如下所示:
class Value<T> {
public static <T> Value<T> createEmptyValue(){
return null;
}
}
Run Code Online (Sandbox Code Playgroud)