第六章 接口,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() 可以获取到外围类

代理

相关文章
|
前端开发 JavaScript Python
分享76个文字特效,总有一款适合您
分享76个文字特效,总有一款适合您
159 5
|
10月前
|
人工智能 算法 云计算
通义大模型合作计划升级发布
通义大模型合作计划升级发布
|
11月前
|
人工智能 自然语言处理 API
用AI Agent做一个法律咨询助手,罗老看了都直呼内行 feat.通义千问大模型&阿里云百炼平台
本视频介绍如何使用通义千问大模型和阿里云百炼平台创建一个法律咨询助手AI Agent。通过简单配置,无需编写代码或训练模型,即可快速实现智能问答功能。演示包括创建应用、配置知识库、上传民法典文档、构建知识索引等步骤。最终,用户可以通过API调用集成此AI Agent到现有系统中,提供专业的法律咨询服务。整个过程简便高效,适合快速搭建专业领域的小助手。
1141 22
|
自然语言处理 算法 数据挖掘
模块化RAG技术路线图:从基础Naive RAG 到Modular RAG全方位技术解读
【8月更文挑战第12天】模块化RAG技术路线图:从基础Naive RAG 到Modular RAG全方位技术解读
3315 9
模块化RAG技术路线图:从基础Naive RAG 到Modular RAG全方位技术解读
|
Linux SDN 网络虚拟化
Linux虚拟网络设备全景解析:定义、工作模式与实践应用
在深入探索Linux操作系统的强大功能时,我们不可避免地会遇到虚拟网络设备的概念。这些设备扮演着构建和维护虚拟化环境中网络通信的关键角色。本文旨在详细介绍Linux虚拟网络设备的定义、工作模式以及它们的多样化用途。
Linux虚拟网络设备全景解析:定义、工作模式与实践应用
|
机器学习/深度学习 人工智能 运维
现代化运维管理系统下的自动化监控与故障排查
传统的运维管理方式已经无法适应日益复杂的信息技术环境,现代化运维管理系统的出现为企业提供了新的解决方案。本文将探讨在现代化运维管理系统下,自动化监控和故障排查的重要性,以及如何利用先进的技术手段提高效率,降低风险。
272 0
|
数据采集 SQL 监控
一次基于日志服务(SLS)进行前端业务埋点的实现过程
一次基于日志服务(SLS)进行前端业务埋点的实现过程
1616 1
|
Linux 数据库 Docker
CentOS 7安装Docker CE镜像报错问题解决
CentOS 7安装Docker CE镜像报错问题: ** 发现 2 个已存在的 RPM 数据库问题, 'yum check' 输出如下: 7:device-mapper-libs-1.02.170-6.el7_9.5.x86_64 是 7:device-mapper-libs-1.02.170-6.el7.x86_64 的副本 7:device-mapper-libs-1.02.170-6.el7_9.5.x86_64 有缺少的需求 device-mapper = ('7', '1.02.170', '6.el7_9.5')
CentOS 7安装Docker CE镜像报错问题解决
|
Linux 开发工具 C语言
百度搜索:蓝易云【Centos8 stream系统编译安装Memcached教程。】
以上是在CentOS 8 Stream系统上编译安装Memcached的基本教程。请注意,具体的配置和参数可能因您的需求而有所不同,您可以根据自己的情况进行调整。同时,请确保在执行任何操作之前备份重要的文件和配置。
297 1
激动!阿里技术官纯手打,1263页并发编程全系笔记,限时开源
所谓并发编程是指在一台处理器上“同时”处理多个任务。并发在同一实体上的多个事件。多个事件在同一时间间隔发生。