java lambda怎么表达式判断被调用接口名称和接口中方法
1.首先能够用于lambda表达式的只能是interface,并且interface 中只有一个方法。
这就说明,只要找到接口类型就能确定用的是哪个方法。(如下:intTypeInterface、StringTypeInterface、paramInterface)
2.判断用的哪个接口,通过调用的方法就能确定(如:Test. invoke())
这里有两种情况
#1.第一种
调用的方法名称唯一,没有重载(overload,方法同名,参数个数和类型不同)
这种情况下直接可以通过方法需要的参数类型即可判断是哪个接口
如示例中只有一个invoke 方法 void invoke(intTypeInterface a), 即可判断用的是 intTypeInterface。
#1.第二种
调用的方法名称不唯一,有重载(overload,方法同名,参数个数和类型不同)
这种情况下需要通过invoke方法调用时,lambda表达式中的参数和返回值确定用的是哪个invoke方法。
比如:test.invoke( () -> 1 );
确定参数为空,返回值为int类型
在intTypeInterface、StringTypeInterface、paramInterface中, intTypeInterface 中的test 方法满足条件
确定调用的是invoke(intTypeInterface a)方法
示例
//下面定义两个functional interface
interface intTypeInterface { int test(); }
interface StringTypeInterface { String test(); }
interface paramInterface { String test(String param); }
class Test {
//两个同名不同参数不同返回类型的函数
//函数返回int类型的接口
void invoke(intTypeInterface a) { System.out.println("intType"); }
//函数返回String类型的接口
void invoke(StringTypeInterface b) { System.out.println("StringType");}
//函数返回String类型,但是有两个参数的接口
void invoke(paramInterface b) { System.out.println("param");}
//***如果调用invoke函数会调用哪一个?***//
public static void main(String[] args) {
Test test = new Test();
//根据 1 返回类型得知应实例化intTypeInterface接口
test.invoke( () -> 1 );
//根据 "String" 返回类型得知应实例化StringTypeInterface接口
test.invoke( () -> "String" );
//根据函数参数得知应实例化paramInterface接口
test.invoke( (String s) -> "String" );
}
java lambda怎么表达式判断被调用接口名称和接口中方法的更多相关文章
- 1.java实现——正规表达式判断
目标:这个代码仅局限于所展示的正规表达式判断,也就是这是一个较单一的正规表达式判断(简易版). 既然是简易版的,所以若要修改这个正规表达式也是非常容易的,只要将二维数组中的数组修改即可.数组数据依据, ...
- Java小题,通过JNI调用本地C++共享库中的对应方法实现杨辉三角的绘制
1.在Eclipse中配置Javah,配置如下 位置是你javah.exe在你电脑磁盘上的路径 位置:C:\Program Files\Java\jdk1.8.0_112\bin\javah.exe ...
- apizza导出为html后,从中提取api_name/api_path/api_method,保存到本地,方便根据接口名称得到接口路径与请求方法
import re import os def open_file(file='c:/newcrm.html'): f=open(file,'r',encoding='utf-8') return f ...
- java 对象变量 c++对象指针 初始化对象变量的2中方法
java 对象变量 c++对象指针 java null引用 c++ null指针 Date deadline 是 对象变量,它可以引用Date类型的对象,但它不是一个对象,实际上它也没有引用对象. ...
- C# 跨线程调用控件的4中方法
原文:C# 跨线程调用控件 在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应. 同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线 ...
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...
- Java Lambda表达式初探
Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...
- Java Lambda表达式入门[转]
原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...
- java~lambda表达式让查询更优雅
在java之前的版本里,如果希望从集合时查找符合条件的数据,如果先遍历他,这种写法是我们不能接受的,所以现在java有了lambda就很好的解决了这个问题,让代码更优雅一些! /** * lambda ...
随机推荐
- python的any()函数
any()函数的参数是一个可迭代对象,其中的一个元素有一个为真,则any()函数返回真,除非全部为假的时候才返回假. aaa=[,,,] print(any(aaa)) 返回:false
- 基于Ubuntu1604+ROS-kinetic+roscpp的激光雷达定位算法从零开始移植
调试的过程太麻烦了,因此打算详细解释一下每步的含义,很多地方懂了之后发现其实很简单,但是学起来却发现很多地方无从下手,因为资料太少了,真的都是不断踩坑一点一点摸索出来的,写以此文以便后人乘凉 此处将展 ...
- LeetCode 873. Length of Longest Fibonacci Subsequence
原题链接在这里:https://leetcode.com/problems/length-of-longest-fibonacci-subsequence/ 题目: A sequence X_1, X ...
- Tensorflow细节-P312-PROJECTOR
首先进行数据预处理,需要生成.tsv..jpg文件 import matplotlib.pyplot as plt import numpy as np import os from tensorfl ...
- 2019-2020-1 20199302《Linux内核原理与分析》第七周作业
第六章 进程的描述和进程的创建 (一)进程的描述 1.OS的三大管理功能:(1)进程管理(进程)(2)内存管理(虚拟内存)(3)文件系统(文件) 2.进程的描述:进程控制块PCB 3.在Linux内核 ...
- rhcsa备战笔记
笔记全部手打 转载请加原文链接 0)重置密码开机按e 找到linux16行 rd.break console=tty0 ctrl+xmount -o remount,rw /sysrootchroo ...
- chmod/chown/chgrp/chattr
权限组合其实就是二进制的组合 注意,用户只能修改属于自己的文件 仅管理员可以修改文件的数组和属主 chmod 三种使用方法 文件的特殊权限 SUID SGID Sticky chowm 修改文件,目录 ...
- walk
一个go做gui的包, 可以配置程序图标 编译运行需要...fest文件 rsrc
- 【洛谷P3369】普通平衡树——Splay学习笔记(一)
二叉搜索树(二叉排序树) 概念:一棵树,若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉搜索树 ...
- log4j 1.2 配置和使用简述
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/log4j_properties_simple_introduct ...