首页 > 解决方案 > 在 Java 8 中使用可选参数调用方法

问题描述

我有以下方法

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


}

但如果我试着这样称呼它

test("hello")

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

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

标签: java

解决方案


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) 也可能很有趣。


推荐阅读