第六章 接口,lamda表达式与内部类

简介: 接口接口可以包含常量, 且不需要publish static final修饰, 接口的域会自动添加该修饰符. Java建议不要写多余的代码,因此省略修饰符更简洁.全部都是常量的接口背离了接口的初衷,不建议使用Java SE8 中, 允许接口增加静态方法,但这也有悖接口的初衷接口的默认方法实...

接口

  • 接口可以包含常量, 且不需要publish static final修饰, 接口的域会自动添加该修饰符. Java建议不要写多余的代码,因此省略修饰符更简洁.
  • 全部都是常量的接口背离了接口的初衷,不建议使用
  • Java SE8 中, 允许接口增加静态方法,但这也有悖接口的初衷
  • 接口的默认方法实现用 defalut 修饰, 适用于子类只需要实现其中几个方法的情况, 而其他方法以默认方法形势存在, 子类没必要实现他们.
  • 接口方法命名的二义性需要子类中解决,可以使用InterfaceName.super.Method()解决
  • 接口和类方法的二义性以类的方法优先, 这样可以保证与之前版本的兼容性
  • 不要让一个接口默认方法重新定义Object中的方法, 原因即上一点提到的, 类的方法优先导致默认方法失效.

lamda表达式

  • 对于只有一个抽象方法的接口(没有default修饰)),需要这种接口的对象时,就可以提供一个 lambda 表达式。这种接口称为函数式接口(functional interface)。
  • @FunctionalInterface 注解表明接口是一个函数式接口,这个注解并非必须, java提倡使用, 这样可以避免对接口新增声明导致编译错误,另外也可以生成文档.
  • lamda表达式会转化为函数式接口, java的设计者没有为语言增加函数类型.
  • 方法引用,示例:Timer t = new Timer(1000 , event-> System.out.println(event)); 可以使用现有的方法,写成Timer t = new Timer(1000 , Systei.out::println)
  • java有个限制, 无法构造泛型类型的数组,可以使用数组的构造器引用克服这个限制,如Person 口 people = stream.toArray(Person[] :: new)
  • lamda表达式中只能引用值不变的外部变量,原因是并发执行时改变变量不安全

内部类

  • 使用内部类的原因:(1)可以访问所在作用域的数据,包括私有数据;(2)对包内其他类隐藏;(3)匿名类比较便捷
  • 内部类中的static域必须时final的, 因为内部类可能有不同的实例, 如果不是final的就可能有多个不同的值;
  • 局部内部类是定义在方法中的内部类, 不能用public或private修饰符声明,他的作用域限制在它所在的块中
  • 静态方法无法使用getClass()因为没有this引用, new Object(){}.getClass().getEnclosingClass() 可以获取到外围类

代理

相关文章
|
消息中间件 Linux
IPC——消息队列
Linux进程间通信——使用消息队列 下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信——使用命名管道   一、什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。
1828 0
|
6月前
|
人工智能 安全 程序员
AI会写代码,但谁来定义问题?
在AI编码时代,技术债务问题被急剧放大。AI既能放大编码能力,也会放大错误和模糊需求带来的问题。本文探讨了需求分析在AI时代的关键作用,提出了有效路径,强调需求分析师将成为AI时代最重要的角色,并确保软件系统真正解决业务问题。
292 98
|
3月前
|
人工智能 自然语言处理 运维
GEO推广服务深度解读:AI搜索时代的企业流量新范式
生成式AI重塑搜索生态,“关键词搜索”正被“自然语言提问+AI生成答案”取代。GEO(生成式引擎优化)应运而生——它不追求页面排名,而致力于让企业内容成为AI回答中的权威引用源。本文系统解析GEO的技术原理、核心价值、落地路径与未来趋势,助力企业抢占AI搜索时代增长先机。(239字)
1023 0
|
10月前
|
数据采集 分布式计算 DataWorks
ODPS在某公共数据项目上的实践
本项目基于公共数据定义及ODPS与DataWorks技术,构建一体化智能化数据平台,涵盖数据目录、归集、治理、共享与开放六大目标。通过十大子系统实现全流程管理,强化数据安全与流通,提升业务效率与决策能力,助力数字化改革。
362 4
|
5月前
|
SQL 关系型数据库 数据库
Postgresql入门之psql用法详解(三)- 元命令详解(\dconfig-\if)
psql元命令以反斜杠开头,由psql客户端直接解析执行,用于增强数据库管理与脚本操作。支持参数引用、变量插值、shell命令执行及SQL语句联动,涵盖连接控制、对象查看、数据导入导出等功能,是PostgreSQL交互操作的重要工具。
|
11月前
|
数据采集 机器学习/深度学习 搜索推荐
电商API接口助力个性化推荐:深度解析数据采集与算法实现机制
电商API接口在个性化推荐中起着关键作用,涵盖数据采集与算法实现,助力电商平台提升用户体验、增加销售转化。本文详解其技术实现与应用案例。
|
存储 数据挖掘 数据处理
R语言中的数据类型转换:解决常见问题的技术指南
【8月更文挑战第28天】数据类型转换是R语言编程中的一项基本技能,对于确保数据处理的准确性和效率至关重要。本文介绍了R中的基本数据类型及其转换方法,并探讨了解决常见问题的一些技巧。掌握这些知识和技巧,将有助于你更加高效地利用R语言进行数据分析和统计建模。
|
10月前
|
人工智能 运维 监控
AI智能体迈向企业生产线遇难题,如何助力AI智能体服务企业业务?
本文由产品专家三桥君探讨AI智能体从实验室走向企业核心业务的三维系统架构,涵盖应用层、模型层和智算底座。应用层通过LLMOps、Agent工作流和插件生态实现智能体快速部署;模型层提供多源模型接入、精调优化和稳定推理;智算底座则依托异构算力调度与安全运维支撑AI运行。该架构可缩短AI产品交付周期,实现资源弹性分配,满足合规要求,推动AI智能体成为企业增长的新引擎。
267 0
|
弹性计算 固态存储 NoSQL
阿里云服务器系统盘ESSD AutoPL、ESSD和ESSD Entry云盘有什么区别?如何选择?
阿里云服务器系统盘提供ESSD Entry、ESSD云盘和ESSD AutoPL三种类型,性能与适用场景各不相同。ESSD Entry云盘性价比高,适合开发测试;ESSD云盘分为PL0-PL3四个级别,适用于时延敏感或I/O密集型业务;ESSD AutoPL云盘实现容量与性能解耦,支持自定义预配置性能及突发性能,最高可达100万IOPS。选择时可根据实际需求与预算决定,经济型实例推荐ESSD Entry,高性能场景建议ESSD云盘或ESSD AutoPL。具体价格与参数可参考阿里云官方文档。

热门文章

最新文章