2016-03-08 106 views
0

我有返回的Function<T,V>创建的功能接口

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

空数组的方法,但我赶java.lang.ClassCastException在运行时空数组。 是否有可能返回一个空的函数接口数组?

+2

主要问题是:你为什么需要它? – AdamSkywalker

+0

@AdamSkywalker想象一下,我有一种方法可以接受'函数 ...函数'。现在我需要一个接受'R ... objects'的方法。因此,我决定将对象中的每个对象(r)转换为lambda'x - > r',并将它们传递给现有的方法 – AleY

回答

2

你可以做的最接近的事是

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

这有什么好做的功能接口,以及一切与数组和仿制药不是很好互动。

+0

谢谢。它有助于。 – AleY

0

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

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

return new Function[0]; 

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

+0

这甚至不会编译 – AdamSkywalker

+0

@AdamSkywalker谢谢指出。我纠正了它。 –

+0

谢谢。它有助于。 – AleY