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