Kotlin 接口与 Java8 新特性接口详解
作者:驻坑大使 发布时间:2023-09-10 01:10:45
前言
在看一本关于高性能编程的时候发现 Java8 中关于接口的新特性的介绍,这个特性是真的棒,解决了一个接口中有多个方法,但并不想实现该接口的类都去实现所有的方法,简单的说就是在类需要的情况再去重写接口。所以有了以下的特性出现。
接口增强
在 Java8 的中接口特性中增加以下俩种特性:
在接口中可以使用 default 关键字修饰默认方法或扩展方法,抽象方法因为其特性的原因无法使用
接口可以使用 static 声明为静态方法,可以通过类直接调用Android Studio 中使用 Java8 需要在模块中的 build.gradle 中配置指定的版 Java 版本,当然使用 Kotlin 为开发语言的话需要为 Kotlin 指定 Jvm 版本,因为 Kotlin 使用的是 Jvm 1.6
那么下面就来展示他们的配置方法:
android {
defaultConfig {
...
kotlinOptions {
jvmTarget = '1.8'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
经过以上的配置就可以使用 Java8 的新特性了代码示例:
puclic interface onTest{
void onTestStandardMenthod();
default void onTestDefaultMethond(){
// 默认的逻辑
}
static void onTestStaticMenthod(){
// 默认的逻辑
}
}
public class TestActivity extends AppCompatActivity implements onTest{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 通过类名调用的接口
onTest.onTestStaticMenthod();
// 通过对象的形式调用 代码只用来举例说明
new TestActivity.onTestStandardMenthod()
new TestActivity.onTestDefaultMethond()
}
@Override
public void onTestStandardMenthod(){} // 必须实现
@Override
public void onTestDefaultMethond(){} // 可以选择性实现
}
上面的代码是展示如何使用,如果对具体的细节想了解的更清楚可以查看官方的文档
可能有朋友好奇我为什么先讲 Java,因为 Kotlin 的语法结构和关键字是不一样的虽然实现的思路是一样的,所以先从 Java 开始,另外是近年 Jvm 版本升级很快,基础概念不会改变,但有新的特性是正常的,如果有常看文档的朋友会发现有些方法实现的方式和细节也会发生改变。
接下来开始 Kotlin 的部分,这部分看起来与 Java 8 相似,但实际上并没有使用 Java 8 的特性,但为了好理解一些可以写成类似的思路。
internal interface onTest {
fun onTestStandardMenthod()
fun onTestDefaultMethond() {
// 默认的逻辑
}
companion object {
fun onTestStaticMenthod() {
// 默认的逻辑
}
}
}
class TestActivity : AppCompatActivity , onTest{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 通过类名调用的接口
onTest.onTestStaticMenthod()
// 通过对象的形式调用 代码只用来举例说明
TestActivity.onTestStandardMenthod()
TestActivity.onTestDefaultMethond()
}
// 必须实现
override fun onTestStandardMenthod(){}
// 可以选择性实现
override fun onTestDefaultMethond(){ super.onTestDefaultMethond()}
}
Kotlin 的接口与 Java 8 类似,既包含抽象方法的声明,也包含实现。与抽象类不同的是,接口无法保存状态。它可以有属性但必须声明为抽象或提供访问器实现,如果对 Kotlin 的接口不明白的的话可以点这里查看更详细的说明。
Kotlin 的接口可以选择是否有方法体,对比之下的话 Java8 需要声明 default 后可以有方法体,静态接口的方法其实在实现概念上是一样的,或许说目前的面向对象万变不离其中吧,根据语言的灵活性结合优秀的思维可以写出更漂亮的代码。
对于 Java8 这让我想到了之前朋友的吐槽 “苹果总是做一些以前就有的功能,然后开发布会来夸大其词,很厉害的样子” 我觉得 Java 就是这样子的,一些本应该随着时代来不断完善的语法或者新的优化,早应该就出了,结果非得在外界的冲击下,才做出改变。看更新的速度,很明显这并不是非常困难的事,这也就诞生了新的语言,世间常态总是如此当现有的工具诟病太多后,就会诞生新的工具,当然 Java 是必不可少的一环。
来源:https://juejin.im/post/5d02492a518825405d15ae46


猜你喜欢
- 1、效果展示2、布局文件<?xml version="1.0" encoding="utf-8"
- SpringBoot版本2.2.4.RELEASE。【1】SpringBoot接收到请求① springboot接收到一个请求返回json格
- StringUtils.isBlank()的使用在校验一个String类型的变量是否为空时,可以使用StringUtils.isBlank方
- 一、前言我们在日常学习中,对一个java代码有问题,不知道jvm内部怎么进行解析的时候;有个伟大壮举就是反编译,这样就可以看到jvm内部怎么
- 前言博主上个礼拜,已经实现了quarkus的native image应用的上线,经过两天的监控下来,一切运行指标良好,就是内存升到了100M
- 本文实例讲述了Android在JNI中使用ByteBuffer的方法。分享给大家供大家参考。具体如下:一、ByteBuffer 定义在NIO
- 本文实例为大家分享了Java实现多人聊天室的具体代码,供大家参考,具体内容如下先说,记录本人的学习过程,当笔记了多人聊天室分为1.服务器①.
- 前言但是在实际业务场景中,数据量迅速增长,一个库一个表已经满足不了我们的需求的时候,我们就会考虑分库分表的操作,在springboot中如何
- 😜shape属性详解<?xml version="1.0" encoding="utf-8"?
- 1.aar包是android studio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android
- 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式
- 本文介绍如何通过C# 程序来扫描并读取图片中的文字,这里以创建一个.Net Core程序为例。下面是具体步骤,供参考。程序测试环境:Visu
- 一:问题描述 在已经root过的android设备下,app执行一个linux命令,app需要获取su权限,在某些a
- 前言注解是Java很强大的部分,但大多数时候我们倾向于使用而不是去创建注解。例如,在Java源代码里不难找到Java编译器处理的@Overr
- 本实例主要实现下面三个基本功能1、C#开发windows服务2、禁止QQ等程序运行3、为windows服务创建自动安装程序下面针对这三个基本
- Java类中字段可以不赋予初始值的原因Java虚拟机会对类的实例对象进行分配内存,在分配内存后,会将内存空间(除了对象头)全部初始化为零值。
- 使用方法:先把mvcpager.dll引用加入mvc项目中。前台代码前台:@{Layout = null;}@using Webdiyer.
- 1、maven打包Spring Boot项目的pom.xml文件中默认使用spring-boot-maven-plugin插件进行打包:&l
- 安装Free Mybatis plugin即可安装MyBatisCodeHelper插件(推荐)补充:IDEA插件(mybatis框架下ma
- 一、项目简述功能包括(管理员和用户角色): 酒店预订,酒店管理,员工管理,入住原理,订单管理, 楼层管理,退房管理,营业额报表等等。二、项目