当前位置: 首页 > news >正文

java 8 关键字_JAVA 8 '::' 关键字

Java 8 中我们可以通过 `::` 关键字来访问类的构造方法,对象方法,静态方法。

现有一个类 Something

class Something {

// constructor methods

Something() {}

Something(String something) {

System.out.println(something);

}

// static methods

static String startsWith(String s) {

return String.valueOf(s.charAt(0));

}

// object methods

String endWith(String s) {

return String.valueOf(s.charAt(s.length()-1));

}

void endWith() {}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

如何用 ‘::‘ 来访问类Something中的方法呢?先定义一个接口,因为必须要用 functional interface 来接收,否则编译错误(The target type of this expression must be a functional interface)

@FunctionalInterface

interface IConvert {

T convert(F form);

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

(@FunctionalInterface 注解要求接口有且只有一个抽象方法,JDK中有许多类用到该注解,比如 Runnable,它只有一个 Run 方法。)

观察接口 IConvert,传参为类型 F,返回类型 T。所以,我们可以这样访问类Something的方法:

访问静态方法

// static methods

IConvert convert = Something::startsWith;

String converted = convert.convert("123");

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

访问对象方法

// object methods

Something something = new Something();

IConvert converter = something::endWith;

String converted = converter.convert("Java");

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

访问构造方法

// constructor methods

IConvert convert = Something::new;

Something something = convert.convert("constructors");

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

总结:我们可以把类Something中的方法static String startsWith(String s){...}、String endWith(String s){...}、Something(String something){...}看作是接口IConvert的实现,因为它们都符合接口定义的那个“模版”,有传参类型F以及返回值类型T。比如构造方法Something(String something),它传参为String类型,返回值类型为Something。注解@FunctionalInterface保证了接口有且仅有一个抽象方法,所以JDK能准确地匹配到相应方法。

欢迎关注微信公众号“Java面试达人”,(id:javasuperman),收看更多精彩内容

相关文章:

  • java类中静态块_java – 为什么.class不调用类中的静态块?
  • java referrer_JavaScript中document.referrer的用法详解
  • java代码压缩文件_使用Java代码压缩文件或文件夹
  • 石子合并 动态规划 java_动态规划:圆形石子合并问题
  • java修饰方法_Java 修饰符
  • arduino timer频率_Arduino利用TimerOne库产生固定频率和占空比的方波
  • flask数据库mysql增删查改_flask_sqlalchemy简单增删查改操作
  • java基础语法的意义_关于java基础语法的学习笔记
  • java中容器试题_Java最常见208道面试题_容器
  • java 开启线程扫描程序_当多个线程在Java中使用System.in上的扫描仪...
  • java中结构体实现_JAVA中如何实现C中的结构体数组的功能?
  • java nio close_wait_Java NIO 操作总结
  • java zmq订阅_java zmq消息队列
  • java按键数据库添加_详解Java MyBatis 插入数据库返回主键
  • java ee jdbc_JavaEE JDBC 补充注意点
  • IOS评论框不贴底(ios12新bug)
  • Iterator 和 for...of 循环
  • js数组之filter
  • Mysql数据库的条件查询语句
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 阿里云应用高可用服务公测发布
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 译米田引理
  • 正则与JS中的正则
  • 组复制官方翻译九、Group Replication Technical Details
  • #QT(TCP网络编程-服务端)
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)(1.9) MSP (version 4.2)
  • (3)llvm ir转换过程
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)springcloud实战之config配置中心
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)Neo4j下载安装以及初次使用
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)linux下的时间函数使用
  • (转)平衡树
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .htaccess 强制https 单独排除某个目录
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core 版本不支持的问题
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .Net程序帮助文档制作
  • .NET程序员迈向卓越的必由之路
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .Net中的设计模式——Factory Method模式
  • /dev下添加设备节点的方法步骤(通过device_create)
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [\u4e00-\u9fa5] //匹配中文字符
  • [100天算法】-不同路径 III(day 73)