Kotlin 接口与 Java8 新特性接口详解

前言

在看一本关于高性能编程的时候发现 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 是必不可少的一环。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 小谈Kotlin的空处理的使用

    近来关于 Kotlin 的文章着实不少,Google 官方的支持让越来越多的开发者开始关注 Kotlin.不久前加入的项目用的是 Kotlin 与 Java 混合开发的模式,纸上得来终觉浅,终于可以实践一把新语言. 本文就来小谈一下 Kotlin 中的空处理. 一.上手的确容易 先扯一扯 Kotlin 学习本身. 之前各种听人说上手容易,但真要切换到另一门语言,难免还是会踌躇是否有这个必要.现在因为工作关系直接上手 Kotlin,感受是 真香(上手的确容易) . 首先在代码阅读层面,对于有 Ja

  • SpringBoot整合Kotlin构建Web服务的方法示例

    今天我们尝试Spring Boot整合Kotlin,并决定建立一个非常简单的Spring Boot微服务,使用Kotlin作为编程语言进行编码构建. 创建一个简单的Spring Boot应用程序.我会在这里使用maven构建项目: <?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  • Kotlin整合Vertx开发Web应用

    今天我们尝试Kotlin整合Vertx,并决定建立一个非常简单的Web应用程序,使用Kotlin和Vertx作为编程语言进行编码构建. 生成项目 打开控制台窗口执行以下代码进行生成一个maven项目 复制代码 代码如下: mvn archetype:generate -DgroupId=com.edurt.kvi -DartifactId=kotlin-vertx-integration -DarchetypeArtifactId=maven-archetype-quickstart -Dver

  • Kotlin中的sam(函数式接口)详解

    用lambda表达式去表示java中的匿名类实例 在使用java去给一个按钮设置监听我们通常会通过创建匿名类实例,如下 Button.setOnClickListener(new OnClickListener()){ @Override public void onClick(View v){ Toast.makeText(this,"Hello World",Toast.LENGTH_LONG).show() } } 在kotlin我们可以通过传递一个lambda表达式去代替这个实

  • Kotlin函数默认值的完全讲解

    函数默认值 周所周知,Java语言并不支持参数使用默认值.有人说这是因为"默认参数"和"方法重载"同时支持的话有二义性的问题,具体真正的原因我不得而知.但是对我个人来说,Java不支持这个特性的确挺让我蛋疼的,虽然说使用方法重载也可以间接实现与默认参数这个特性相同的功能,但这就意味着你得写更多的代码-- 简要介绍 Kotlin函数定义时,支持对参数指定默认值,这样就有效减少Java之前定义重载函数的数量. 简要对比如下: 1.Java函数定义,如果sayHelloT

  • Kotlin 接口与 Java8 新特性接口详解

    前言 在看一本关于高性能编程的时候发现 Java8 中关于接口的新特性的介绍,这个特性是真的棒,解决了一个接口中有多个方法,但并不想实现该接口的类都去实现所有的方法,简单的说就是在类需要的情况再去重写接口.所以有了以下的特性出现. 接口增强 在 Java8 的中接口特性中增加以下俩种特性: 在接口中可以使用 default 关键字修饰默认方法或扩展方法,抽象方法因为其特性的原因无法使用 接口可以使用 static 声明为静态方法,可以通过类直接调用Android Studio 中使用 Java8

  • Go1.20 arena新特性示例详解

    目录 正文 快速背景 最新进展 总结 正文 大概半年前,我写过一篇文章<Go 要违背初心吗?新提案:手动管理内存>.有兴趣了深入解的同学,可以再回顾一下. 当时我们还想着 Go 团队应该不会接纳,至少不会那么快: 懒得翻也可以看我再次道来,本文提到的提案<proposal: arena: new package providing memory arenas>,这其中的 Arena 将会是一个突破项. 快速背景 Arena 指的是一种从一个连续的内存区域分配一组内存对象的方式.优点

  • java8新特性之接口默认方法示例详解

    前言 JAVA8 已经发布很久,而且毫无疑问,java8 是自 java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和 JVM 等诸多方面的新特性.Java8 新特性列表如下: 接口默认方法 函数式接口 Lambda 表达式 方法引用 Stream Optional 类 Date API Base64 重复注解与类型注解 接口默认方法 1.什么是接口默认方法 从 Java8 开始,程序允许在接口中包含带有具体实现的方法,使用 default 修饰,这类方法就是默认方法.

  • Java8新特性之接口中的默认方法和静态方法详解

    一.前言 Java 8 引入了默认方法以及可以在接口中定义的静态方法. 默认方法是一个普通的 java 方法,但以 default 关键字开头,静态方法像往常一样用 static 关键字声明. 二.为什么在 Java 接口中使用默认方法? 为什么java在接口中引入了默认方法. 假设一个拖拉机制造公司发布了操作拖拉机的标准接口,如如何挂挡或停车等. 开发者已经开发了不同类型的拖拉机来实现标准的拖拉机接口. 如果公司在其标准接口中增加了新的功能,如如何跳动拖拉机? 开发者需要对他们的类进行修改以定

  • 浅析Java8新特性Lambda表达式和函数式接口

    什么是Lambda表达式,java8为什么使用Lambda表达式? "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数.我们可以把 Lambda表达式理解为是 一段可以传递的代码.最直观的是使用Lambda表达式之后不用再写大量的匿名内部类,简化代码,提高了代码的可读性. // 启动一个线程,不使用Lambda

  • Java8新特性之接口中的默认方法和静态方法

    写在前面 在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法.而在Java8中,接口中可以声明默认方法和静态方法,本文,我们就一起探讨下接口中的默认方法和静态方法. 接口中的默认方法 Java 8中允许接口中包含具有具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰 . 例如,我们可以定义一个接口MyFunction,其中,包含有一个默认方法getName,如下所示. public interface MyF

  • 浅谈Java8新特性Predicate接口

    一.前言 Java 8中引入了Predicate功能接口. Java Predicate表示一个参数的谓词. Predicate是一个布尔值的函数. Java Predicate是一个功能接口,属于java.util.function包. Predicate的功能方法是test(T t). Predicate的其他方法是test.isEqual.and.or.negate和not. not方法在Java 11中被引入. 在本文章,我们将提供Predicate的例子及其所有方法. 二.test(T

  • 深入理解Java8新特性之Lambda表达式的基本语法和自定义函数式接口

    1.写在前面 目前我们学习Java主要用到的应该就是Java8了,或者说大部分企业当前使用的也是Java8.那么既然Java8的应用如此之广泛,一定有一些亮点所在: Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期API 其他新特性 速度更快.代码更少(增加了新的语法 Lambda 表达式).强大的 Stream API.便于并行.最大化减少空指针异常 Optional. 2.为什么要使用Lambda表达式? Lambda 是一

  • 深入理解Java8新特性之接口中的默认方法和静态方法

    1.接口中的默认方法和静态方法 Java 8中允许接口中包含具有具体实现的方法,该方法称为 "默认方法" ,默认方法使用 default 关键字修饰. 接口默认方法的 " 类优先 " 原则.若一个接口中定义了一个默认方法,而另外一个父类或接口中又定义了一个同名的方法时 选择父类中的方法.如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略. 接口冲突.如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方

  • Java8 新特性Lambda表达式实例详解

    Java8 新特性Lambda表达式实例详解 在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口): public interface OnClickListener { void onClick(View v); } 我们是这样使用它的: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { v.setText("

随机推荐