在看一本關於高性能編程的時候發現 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 是必不可少的一環。優化