Kotlin 接口與 Java8 新特性接口詳解
前言
在看一本關于高性能編程的時候發(fā)現(xiàn) Java8 中關于接口的新特性的介紹,這個特性是真的棒,解決了一個接口中有多個方法,但并不想實現(xiàn)該接口的類都去實現(xiàn)所有的方法,簡單的說就是在類需要的情況再去重寫接口。所以有了以下的特性出現(xiàn)。
接口增強
在 Java8 的中接口特性中增加以下倆種特性:
- 在接口中可以使用 default 關鍵字修飾默認方法或擴展方法,抽象方法因為其特性的原因無法使用
- 接口可以使用 static 聲明為靜態(tài)方法,可以通過類直接調用Android Studio 中使用 Java8 需要在模塊中的 build.gradle 中配置指定的版 Java 版本,當然使用 Kotlin 為開發(fā)語言的話需要為 Kotlin 指定 Jvm 版本,因為 Kotlin 使用的是 Jvm 1.6
那么下面就來展示他們的配置方法:
android {
defaultConfig {
...
kotlinOptions {
jvmTarget = '1.8'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
經(jīng)過以上的配置就可以使用 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(){} // 必須實現(xiàn)
@Override
public void onTestDefaultMethond(){} // 可以選擇性實現(xiàn)
}
上面的代碼是展示如何使用,如果對具體的細節(jié)想了解的更清楚可以查看官方的文檔
可能有朋友好奇我為什么先講 Java,因為 Kotlin 的語法結構和關鍵字是不一樣的雖然實現(xiàn)的思路是一樣的,所以先從 Java 開始,另外是近年 Jvm 版本升級很快,基礎概念不會改變,但有新的特性是正常的,如果有??次臋n的朋友會發(fā)現(xiàn)有些方法實現(xiàn)的方式和細節(jié)也會發(fā)生改變。
接下來開始 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()
}
// 必須實現(xiàn)
override fun onTestStandardMenthod(){}
// 可以選擇性實現(xiàn)
override fun onTestDefaultMethond(){ super.onTestDefaultMethond()}
}
Kotlin 的接口與 Java 8 類似,既包含抽象方法的聲明,也包含實現(xiàn)。與抽象類不同的是,接口無法保存狀態(tài)。它可以有屬性但必須聲明為抽象或提供訪問器實現(xiàn),如果對 Kotlin 的接口不明白的的話可以點這里查看更詳細的說明。
Kotlin 的接口可以選擇是否有方法體,對比之下的話 Java8 需要聲明 default 后可以有方法體,靜態(tài)接口的方法其實在實現(xiàn)概念上是一樣的,或許說目前的面向對象萬變不離其中吧,根據(jù)語言的靈活性結合優(yōu)秀的思維可以寫出更漂亮的代碼。
對于 Java8 這讓我想到了之前朋友的吐槽 “蘋果總是做一些以前就有的功能,然后開發(fā)布會來夸大其詞,很厲害的樣子” 我覺得 Java 就是這樣子的,一些本應該隨著時代來不斷完善的語法或者新的優(yōu)化,早應該就出了,結果非得在外界的沖擊下,才做出改變??锤碌乃俣?,很明顯這并不是非常困難的事,這也就誕生了新的語言,世間常態(tài)總是如此當現(xiàn)有的工具詬病太多后,就會誕生新的工具,當然 Java 是必不可少的一環(huán)。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
(starters)springboot-starter整合阿里云datahub方式
這篇文章主要介紹了(starters)springboot-starter整合阿里云datahub方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Java基于HttpClient實現(xiàn)RPC的示例
HttpClient可以實現(xiàn)使用Java代碼完成標準HTTP請求及響應。本文主要介紹了Java基于HttpClient實現(xiàn)RPC,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10
解決spring?data?jpa?saveAll()?保存過慢問題
這篇文章主要介紹了解決spring?data?jpa?saveAll()保存過慢問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Java中你真的會用Constructor構造器嗎之看完本篇你就真的會了
顯式初始化要求我們在寫程序時就確定初始值,這有時很不方便。我們可以使用構造器(constructor)來初始化對象。構造器可以初始化數(shù)據(jù)成員,還可以規(guī)定特定的操作。這些操作會在創(chuàng)建對象時自動執(zhí)行。下面文字將對該內容做詳細介紹,需要的小伙伴請參考2021-09-09
SpringBoot集成百度AI實現(xiàn)人臉識別的項目實踐
本文主要介紹了SpringBoot集成百度AI實現(xiàn)人臉識別的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
java實現(xiàn)Object轉String的4種方法小結
這篇文章主要介紹了java實現(xiàn)Object轉String的4種方法小結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09

