我进行了一次面试测试,看到了以下代码:
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());
}
}
我从来没有见过像这样的 Java 泛型
Value.<SomeValue>
该测试是使用上面给定的单元测试代码来实现 Value 类。
我试图找出下面的 Value 方法签名(需要实现):
public interface Value<T> {
public boolean hasValue();
public Value<T> createEmptyValue();
}
有哪位知道的请帮帮忙吗?
谢谢
编辑:根据下面的答案应该是这样的@marlon
public class Value<T> {
public boolean hasValue(){}
public static <M> Value<M> createEmptyValue(){}; //need <M>
}
需要了解的关键语法:
Value.<SomeValue> //ClassName.<Type>method
是使用参数化参数调用类的静态方法的方法。
编辑:根据@snipes83,使用参数化参数调用类的非静态方法的语法。
SomeObject.<Type>method
Value.<SomeValue>
这是泛型代表方法的方式。
使用谷歌番石榴Optional
举个例子:
Optional<String> email = Optional.<String>of(strEmail);
See 泛型类型 - 调用泛型方法 http://www.onjava.com/pub/a/onjava/excerpt/javaian5_chap04/index1.html
由于接口不能声明静态方法(对你的java感到羞耻),只需将你的方法声明为静态并忘记接口,如下所示:
class Value<T> {
public static <T> Value<T> createEmptyValue(){
return null;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)