我想将多个可选对象作为varags传递给函数吗?
Optional<ab> ab = Optional.of(ab);
Optional<cd> cd = Optional.of(cd);
Optional<dc> dc = Optional.of(dc);
Optional<ba> ba = Optional.of(ba);
data(ab, cd, dc, ba);
data(Optional<Object>... objects){...}
如果我这样做我会出错,任何建议如何进行?
答案 0 :(得分:1)
它与可变参数无关。您不能在期望Optional<SomeSpecificType>
的地方传递Optional<Object>
。它们不兼容。
假设(不包含可变参数)
static void data(Optional<Object> object) {
// …
}
现在,如果我们尝试
Optional<String> ab = Optional.of("");
data(ab);
在我的Eclipse中,我收到以下错误消息:
类型为MyClass的方法数据(可选
Java泛型具有此限制。您也无法通过,例如List<String>
会出现List<Object>
。
您也可以通过声明通用方法来克服限制:
static <T> void data(Optional<T> object) {
// …
}
或者就是这样:
static void data(Optional<?> object) {
// …
}
使用这两个声明中的任何一个,上面的调用都可以。
顺便说一句,@ HadiJ在注释中是正确的:Optional
用于表示可能存在或不存在的方法的返回值。它们几乎没有其他很好的用途,因为参数不是其中之一。在我看来,对于您的用例,您应该只传递存在的参数,而忽略不存在的参数。您的data
方法可能会收到一个更长或更短的参数数组,但只需要处理该数组的所有元素而不必关心Optional
。将String
,Integer
,LocalDate
等传递到声明为void data(Object... objs)
的方法很简单,也没有问题。