我正在尝试做以下事情
interface Updater {
void update(String value);
}
void update(Collection<String> values, Updater updater) {
update(values, updater::update, 0);
}
void update(Collection<String> values, Function<String, Void> fn, int ignored) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个编译器错误:
"Cannot convert void to java.lang.Void"
Run Code Online (Sandbox Code Playgroud)
这意味着updater::update不能用作Function<String, Void>.
当然,我不能写Function <String, void>,我不想改变的返回类型update()来Void.
我该如何解决这个问题?
只是想知道 - 我写了以下功能
template <class T, size_t N>
T* asFlatArray (T arr[][N])
{
// some code
}
Run Code Online (Sandbox Code Playgroud)
并称之为
asFlatArray(myArray); // where myArray is int myArray[some_size][sime_size];
Run Code Online (Sandbox Code Playgroud)
编译运行没有错误.但如果我改变'arr'来引用像
template <class T, size_t N>
T* asFlatArray (T (&arr)[][N])
{
// some code
}
Run Code Online (Sandbox Code Playgroud)
我会有错误:
parameter ‘arr’ includes reference to array of unknown bound ‘T [][N]’
Run Code Online (Sandbox Code Playgroud)
我知道如何解决它
template <class T, size_t Rows, size_t Columns>
T* asFlatArray (T (&arr)[Rows][Columns])
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么会这样?