在看一本关于高性能编程的时候发现 Java8 中关于接口的新特性的介绍,这个特性是真的棒,解决了一个接口中有多个方法,但并不想实现该接口的类都去实现全部的方法,简单的说就是在类须要的状况再去重写接口。因此有了如下的特性出现。android
在 Java8 的中接口特性中增长如下俩种特性:编程
android {
defaultConfig {
...
kotlinOptions {
jvmTarget = '1.8'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
复制代码
通过以上的配置就可使用 Java8 的新特性了代码示例:jvm
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(){} // 能够选择性实现
}
复制代码
上面的代码是展现如何使用,若是对具体的细节想了解的更清楚能够查看官方的文档ide
可能有朋友好奇我为何先讲 Java,由于 Kotlin 的语法结构和关键字是不同的虽然实现的思路是同样的,因此先从 Java 开始,另外是近年 Jvm 版本升级很快,基础概念不会改变,但有新的特性是正常的,若是有常看文档的朋友会发现有些方法实现的方式和细节也会发生改变。工具
接下来开始 Kotlin 的部分,这部分看起来与 Java 8 类似,但实际上并无使用 Java 8 的特性,但为了好理解一些能够写成相似的思路。post
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 后能够有方法体,静态接口的方法其实在实现概念上是同样的,或许说目前的面向对象万变不离其中吧,根据语言的灵活性结合优秀的思惟能够写出更漂亮的代码。gradle
对于 Java8 这让我想到了以前朋友的吐槽 “苹果老是作一些之前就有的功能,而后开发布会来夸大其词,很厉害的样子” 我以为 Java 就是这样子的,一些本应该随着时代来不断完善的语法或者新的优化,早应该就出了,结果非得在外界的冲击下,才作出改变。看更新的速度,很明显这并非很是困难的事,这也就诞生了新的语言,世间常态老是如此当现有的工具诟病太多后,就会诞生新的工具,固然 Java 是必不可少的一环。优化