fge*_*fge 5 java lambda invokedynamic java-8
我目前正在研究这个项目.它运作得非常好.
然而,在重新阅读README之后,我开始怀疑如何记录一些困扰我的东西......
引用这个例子,并忘记抛出异常,它的内容如下:
Files.list(somePath).map(Path::toRealPath).forEach(System.out::println)
Run Code Online (Sandbox Code Playgroud)
好.现在,Path
涉及的方法就是这个.当然,我们没有通过任何LinkOption
.
再说一遍:让我们忘记它抛出任何异常.
流的.map()
需要Function
作为参数.此接口用于Function<T, R>
定义为:
R apply(T t);
Run Code Online (Sandbox Code Playgroud)
但我使用的方法不接受任何参数.乍一看,它似乎不匹配Function
,对吗?除了那个...
它可以写成:
path -> path.toRealPath()
Run Code Online (Sandbox Code Playgroud)
因此,如果方法引用没有参数,或类似的东西,它看起来像使用的机制有点能够调用"流对象"上的方法...
我想相应地记录下来,我在这里遗漏了一些东西.
我错过了什么?
非静态方法将接收者 ( this
) 对象作为隐式第一个参数。因此,Class::nonStaticMethod
比你想象的还要多一个论证。
Java 语言规范第 15.13.1 节,方法参考的编译时声明:
\n\n\n\n\n
\n- \n
其次,给定具有n 个参数的目标函数类型,确定一组可能适用的方法:
\n\n\n
- \n
如果方法引用表达式的格式为ReferenceType
\n\n::
[TypeArguments] Identifier,则潜在适用的方法是要搜索的类型的成员方法,这些方法具有适当的名称(由Identifier给出)、可访问性、数量(n或n-1)以及类型参数数量(源自[TypeArguments]),如 \xc2\xa715.12.2.1 中指定。考虑两个不同的数量,n 和 n-1,以说明此形式引用方法
static
或实例方法的可能性。
归档时间: |
|
查看次数: |
95 次 |
最近记录: |