创建一个空的函数接口数组

Creating an empty array of functional interfaces

我有一个方法 return 是一个 Function<T,V>

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

但我在运行时捕捉到 java.lang.ClassCastException。 是否可以return一个空的功能接口数组?

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

你为什么不直接 return 一个包含 0 个函数的数组?

return new Function[0];

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

你能做的最接近的事情是

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

这与功能接口无关,而与数组和泛型交互不佳有关。