我正在尝试解决Java问题,基本上我想通过实现Option类来模仿Java中Scala Option的行为。我接受了几次测试,以确保我的实现按预期工作。第一个测试看起来像这样:
@Test
public void Empty_Option_Has_No_Value() {
Assert.assertFalse(Option.<SomeClass> createEmptyOption()
.hasValue());
}
你见过"Option.<SomeClass> createEmptyOption()"
符号吗?我一直在尝试创建一个返回Option实例的createEmptyOption()方法,但我的代码不能编译。
有关如何实现createEmptyOption()方法的任何建议??
提前谢谢。
答案 0 :(得分:2)
使用的语法是使用类型参数调用泛型方法。您的方法应如下所示:
public abstract class Optional<T> {
public static <O> Optional<O> createEmptyOption() {
return new EmptyOptional<>();
}
}
即。你有一个返回Optional<O>
的泛型方法。
如果您这样调用它:
final Optional<Integer> optI = Optional.createEmptyOption();
然后编译器会将O
推断为Integer
。如果您在没有显式赋值的情况下调用它,就像您一样,编译器无法推断出类型,因此您需要提供它。这就是语法的作用。
查看Guava's Optional
的实施想法的源代码。