小编Kas*_*eda的帖子

无法将void转换为java.lang.Void

我正在尝试做以下事情

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.

我该如何解决这个问题?

java lambda java-8

20
推荐指数
2
解决办法
1万
查看次数

为什么编译器无法通过引用传递2D数组来计算数组的大小

只是想知道 - 我写了以下功能

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)

但我不明白为什么会这样?

c++ template-argument-deduction

3
推荐指数
1
解决办法
103
查看次数

标签 统计

c++ ×1

java ×1

java-8 ×1

lambda ×1

template-argument-deduction ×1