Java 8 是否将可选对象作为变量传递到参数中?

Java 8 是否将可选对象作为变量传递到参数中?,java-8,optional,Java 8,Optional,我想在函数中传递多个可选对象作为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){.

我想在函数中传递多个可选对象作为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){...}
Optional ab=Optional.of(ab);
可选cd=可选的。of(cd);
可选dc=可选的。of(dc);
可选ba=可选的。of(ba);
数据(ab、cd、dc、ba);
数据(可选…对象){…}

如果我不这样做,我会出错,有什么建议可以继续吗?

这与varargs无关。如果需要
可选
,则不能传递
可选
。它们不兼容

仅假设(不带varargs):

静态无效数据(可选对象){
// …
}
现在如果我们尝试

    Optional<String> ab = Optional.of("");
    data(ab);
Optional ab=Optional.of(“”);
数据(ab);
在我的Eclipse中,我收到以下错误消息:

MyClass类型中的方法数据(可选)不可用 适用于参数(可选)

Java泛型是根据这个限制定义的。您也不能传递,例如,
列表
,其中需要一个
列表

您也可以通过将方法声明为泛型来克服此限制:

static <T> void data(Optional<T> object) {
    // …
}
静态无效数据(可选对象){
// …
}
或者像这样:

static void data(Optional<?> object) {
    // …
}
静态无效数据(可选对象){
// …
}
对于这两个声明中的任何一个,上面的调用都是OK的


顺便说一句,@HadiJ在注释中是正确的:
Optional
表示可能存在或不存在的方法的返回值。它们几乎没有其他好的用途,因为参数不是其中之一。在我看来,对于您的用例,您应该只传递存在的参数,而忽略不存在的参数。your
data
方法可能接收更长或更短的参数数组,但只需处理数组的所有元素,而不必关心
可选的
。将
String
Integer
LocalDate
等传递给声明为
void data(Object…objs)
的方法非常简单,不会造成任何问题。

将可选参数作为参数传递是不好的做法。因为在我看来,使代码不可读。
可选
不是
可选
(但您需要确定
ab
是类还是变量,类名应该以大写字母开头)。请在问题中逐字引用错误消息。
static void data(Optional<?> object) {
    // …
}