0

我有一个方法返回一个空数组Function<T,V>

public <T, V> Function<T, V>[] foo() {
    ...
    return (Function<T, V>[]) new Object[0];            
    ...
}

但我在运行时赶上java.lang.ClassCastException。是否可以返回一个空的功能接口数组?

4

2 回答 2

2

你能做的最接近的事情是

return (Function<T, V>[]) new Function[0];

这与函数式接口无关,与数组和泛型交互不好有关。

于 2016-03-08T21:20:40.763 回答
0

您不能将 Object[] 转换为另一种类型,仅仅因为它不是那种类型。即使数组大小为 0,这也适用。

为什么不简单地返回一个包含 0 个函数的数组?

return new Function[0];

Function[]这可能会给出“未经检查的强制转换”警告,但它仍然可以工作,因为类型和参数化类型在运行时Function<T, V>[]由于类型擦除而没有区别。在这种情况下,您可以安全地使用@SuppressWarnings("unchecked").

于 2016-03-08T21:15:34.210 回答