我有以下方法
public static Boolean test(String str, Optional<Boolean> test) {
}
但是如果我尝试这样称呼
test("hello")
我收到一个错误,该方法需要两个参数。
Optional参数是否允许我在不提供Optional参数的情况下调用测试方法?
答案 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
。