Kotlin 接口與 Java8 新特性接口

在看一本關於高性能編程的時候發現 Java8 中關於接口的新特性的介紹,這個特性是真的棒,解決了一個接口中有多個方法,但並不想實現該接口的類都去實現全部的方法,簡單的說就是在類須要的狀況再去重寫接口。因此有了如下的特性出現。android

接口加強

在 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 的新特性了代碼示例: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 是必不可少的一環。優化


歡迎關注 Kotlin 中文社區!

中文官網:www.kotlincn.net/

中文官方博客:www.kotliner.cn/

公衆號:Kotlin

知乎專欄:Kotlin

CSDN:Kotlin中文社區

掘金:Kotlin中文社區

簡書:Kotlin中文社區

相關文章
相關標籤/搜索