Java 8 是否将可选对象作为变量传递到参数中?
我想在函数中传递多个可选对象作为varagsJava 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){.
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
表示可能存在或不存在的方法的返回值。它们几乎没有其他好的用途,因为参数不是其中之一。在我看来,对于您的用例,您应该只传递存在的参数,而忽略不存在的参数。yourdata
方法可能接收更长或更短的参数数组,但只需处理数组的所有元素,而不必关心可选的
。将String
、Integer
、LocalDate
等传递给声明为void data(Object…objs)
的方法非常简单,不会造成任何问题。将可选参数作为参数传递是不好的做法。因为在我看来,使代码不可读。可选
不是可选
(但您需要确定ab
是类还是变量,类名应该以大写字母开头)。请在问题中逐字引用错误消息。
static void data(Optional<?> object) {
// …
}