java编译器对method reference做了什么吗

如题所述

Java SE 8的Java语言规范,15.13.2说:
Chapter 15. Expressions
A method reference expression is congruent with a function type if both of the following are true:
* The function type identifies a single compile-time declaration corresponding to the reference.
* One of the following is true:
** The result of the function type is void.
** The result of the function type is R, and the result of applying capture conversion (§5.1.10) to the return type of the invocation type (§15.12.2.6) of the chosen compile-time declaration is R' (where R is the target type that may be used to infer R'), and neither R nor R' is void, and R' is compatible with R in an assignment context.
所以如果目标的functional interface type的SAM方法的返回类型是void,与它对接的method reference的返回类型是什么都可以,它只是会被忽略而已。
这种处理感觉就像MethodHandle.asType()或者说invoke()的适配处理一样。
而对于lambda expression则没有提供这样的适配处理。仅此而已
温馨提示:内容为网友见解,仅供参考
无其他回答

java三个引用类型
所以在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱。一,强引用 Java中默认声明的就是强引用,比如:Object obj = new Object(); \/...

一个Java中关于抛出异常的问题
Java编译器要求Java程序必须捕获或声明所有的非运行时例外,但对运行时例外可以不做处理。2.3 异常处理关键字Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally。JB的在线帮助中对这几个关键字是这样解释的:Throws: Lists the exceptions a method could throw.Throw: Transfers control of the ...

java 四个点是什么特殊运算符?
java中的条件运算符即三目运算符,它是一个特殊的运算符,其语法形式如下:布尔表达式?表达式1:表达式2 运算过程:如果布尔表达式的值为true,就返回表达式1的值,否则返回表达式2的值,例如:int sum=90;String str=sum<100 ? "失败" : "成功";等价于下列代码:String str=null;if(num<100){ ...

Java编程中 常见的异常有哪几种
1.编译时异常(需要强制处理) 2.运行时异常(不需要强制处理)常见的异常有:IOException:输入输出流异常FileNotFoundException:文件找不到的异常ClassNotFoundException:类找不到的异常DataFormatException:数据格式化异常NoSuchFieldException:没有匹配的属性异常NoSuchMethodException:没有匹配的方法异常 S...

Java 里的final关键字可以用于什么场合 各有什么作用
final。因为你无法取用private方法,当然就无从覆写,你可以将关键字final加于private方法上,但是这样做不会带来任何额外的意 义.java中的所有方法,除了被申明为final者,皆采用后期系结,这么做是告诉编译器动态系结是不需要的,于是就产生效率叫佳的程式码,但这么做并不 会给你的程式带来整体效率的提升 class With...

java 多态怎么回事,如何实现?
另一个指针指向一块从java堆中为分配出来内存空间。The Java Virtual Machine does not require any particular internal structure for objects. In Sun 's current implementation of the Java Virtual Machine, a reference to...

java基础知识!int[] xx此时是什么变量? 引用变量? 还是局部变量...
首先类型分java中有两种变量类型,基本数据类型变量和引用对象变量 作用范围分引用对象变量又分为四种 静态\/类成员\/方法参数\/本地(后两种也许只是定义位置不同,其他是一样的,参照原文:Reference variables can be declared as static ,instance,method parameters or local )所以不是基本数据类型的变量...

java反射机制的实现原理
反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。下面具体介绍一下java的反射机制。这里你将颠覆原来对java的理解。 Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method;其中class代表的时类对 象,Constructor-类的构造器对...

JVM详解基础篇之执行引擎(玩转Java,游刃有余)
1.两种执行器 Java虚拟机的执行引擎子系统中包含两种执行器,分别为解释器和即时编译器。当执行引擎获取到由javac编译后的.class字节码文件后,在运行时是通过解释器(Interpreter)转换成最终的机械码执行。另外为了提升效率,JVM加入了一种名为 JIT即时编译 的技术,即时编译器的目的是为了避免一些经常执行的代码被解释执行...

java里的new到底是什么意思???
赋值 给变量c,这就是Java中引用概念,c就叫做引用,或者叫引用变量,或者直接叫变量,没问题,都是它;c的值就是一个内存地址,或者叫引用地址。通过这个地址,就可以准确的找到刚才创建出来的对象,以后我们要使用这个对象做一些事情,调用此对象的方法什么的,都用过这个引用。

相似回答