Java 8中带有Optional参数的调用方法

时间:2018-11-04 19:58:29

标签: java

我有以下方法

public static Boolean test(String str, Optional<Boolean> test) {


}

但是如果我尝试这样称呼

test("hello")

我收到一个错误,该方法需要两个参数。

Optional参数是否允许我在不提供Optional参数的情况下调用测试方法?

3 个答案:

答案 0 :(得分:6)

Optional不是var-args那样的可选参数。
Optional是一个容器对象,可能包含也可能不包含非空值。

因此您可以将方法调用为:

test("...", Optional.of(true));

test("...", Optional.empty());

请注意,使用var-args

public static Boolean test(String str, Boolean... test) {    
 //...
}

这将是有效的:

test("hello")

但是var-args 不是正确的方法,因为它传递了 0个或更多对象而不是 0或1 宾语。

方法重载更好:

public static Boolean test(String str, Boolean test) {
 // ...
}

public static Boolean test(String str) {
 // ...
}

在其他一些情况下,@Nullable约束(JSR-380)也可能很有趣。

答案 1 :(得分:0)

尝试一下

public static Boolean test(String str, Boolean ... test) {}

它将与您合作

答案 2 :(得分:0)

简而言之,Optional是一个类,在Java中,必须像定义的那样将确切数量的参数传递给方法。

唯一的例外是将...放在方法声明中的类对象名称之后。

public String test (String X, String... Y) { }

将第二个参数设为either zero or more