首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >方法参数的目标类型转换,Lambda

方法参数的目标类型转换,Lambda
EN

Stack Overflow用户
提问于 2019-09-04 09:51:29
回答 1查看 125关注 0票数 3

考虑以下两个功能接口( java.lang.Runnable and java.util.concurrent.Callable<V>):

代码语言:javascript
运行
复制
public interface Runnable {
    void run();
}

public interface Callable<V> {
    V call();
}

假设您有overloaded,方法调用如下:

代码语言:javascript
运行
复制
void invoke(Runnable r) {
    r.run();
}

<T> T invoke(Callable<T> c) {
    return c.call();
}

考虑下面的方法调用

代码语言:javascript
运行
复制
String s = invoke(() -> "done");

这将调用invoke(Callable)。但是怎么做呢?填充器如何能够将类型确定为可调用类型?我没有从我读过的Oracle文档中理解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 09:56:06

因为() -> "done"返回一个字符串值“已完成”,这是Callablecall方法在以下方面所负责的:

代码语言:javascript
运行
复制
String s = invoke(() -> "done"); 
// from impl. of 'invoke', the variable 's' is assigned value "done"

另一方面,run是一个void方法,与Runnable类型匹配的可能是一个空调用,如:

代码语言:javascript
运行
复制
invoke(() -> System.out.println("done"))
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57785855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档