尝试在Java中模仿Scala选项时出现问题

时间:2014-03-05 23:10:43

标签: java scala

我正在尝试解决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()方法的任何建议??

提前谢谢。

1 个答案:

答案 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的实施想法的源代码。