【发布时间】:2020-03-30 11:39:41
【问题描述】:
好的,所以我有一个类似的功能
public static UnorderedList newUnorderedList(Object... items) {
return new UnorderedList(
stream(items)
.peek(e -> checkNotNull(e, "Cannot create null list item"))
.map(e -> {
if (e instanceof Component) return newListItem((Component) e);
if (e instanceof String) return newListItem((String) e);
throw new IllegalArgumentException("List item must be String or Component but is neither: " + e.getClass().getName());
}).toArray(ListItem[]::new)
);
}
(编辑:注意:这里的UnorderedList,是Vaadin 对html <ul> 标签的实现,我不是要获取java 列表。)
当你用一个数组调用它时,这会触发一个警告,说不清楚你是将数组本身视为单个元素还是元素的容器。
不要立即看到摆脱这种情况的优雅方法。这两个我都不喜欢:
- 始终转换为
Object[] - 把
Object...变成Collection<Object>
是否有注释或其他东西可以让编译器知道始终将数组解析为对带注释的方法的可变参数调用? (在方法声明上,而不是调用站点。)
【问题讨论】:
-
什么是UnorderedList,为什么不创建一个返回无序列表的收集器?
-
你试过用
Arrays.stream(items) -
@lscoughlin 抱歉,我认为这无关紧要。
UnorderedList是 Vaadin 对 html<ul>标签的实现。 -
@LazarPetrovic 到底要做什么?我已经在
stream(items)使用它了。
标签: java casting jvm variadic-functions type-inference