日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

java 无类名实现接口_为什么很多人写 Java/Android 时,选择让同一个类实现多个接口,而不是用多个内部匿名类?...

發布時間:2024/9/19 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 无类名实现接口_为什么很多人写 Java/Android 时,选择让同一个类实现多个接口,而不是用多个内部匿名类?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

呃…… 標題不太好。讓我在問題描述里解釋一下。

讓我以 Android 開發中一個簡單的例子說明:在一個 Activity 中有多個可點擊的按鈕時,很多人會這么寫:

public class ExampleActivity extends Activity implements OnClickListener {

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_example);

findViewById(R.id.first_button).setOnClickListener(this);

findViewById(R.id.second_button).setOnClickListener(this);

}

@Override

public void onClick(final View v) {

switch (v.getId()) {

case R.id.first_button:

// bla bla bla

break;

case R.id.second_button:

// bra bra bra

}

}

}

事實上,Android 官方有些 sample 里面也是這么寫的。然而在我看來,這么寫代碼是非常不優雅的,因為一個 OnClickListener 的實現,只應該關注和點擊事件本身相關的內容,它的含義和 Activity 的含義是截然無關的,讓同一個類繼承/實現他們,會使得這個類的含義變得不清晰。同時,這樣還給 ExampleActivity 類增加了一個 public 的方法,削弱了這個類的封閉性。

所以如果像下面這樣,會好不少:

public class ExampleActivity extends Activity {

private OnClickListener onClickListener = new OnClickListener() {

@Override

public void onClick(final View v) {

switch (v.getId()) {

case R.id.first_button:

// bla bla bla

break;

case R.id.second_button:

// bra bra bra

}

}

};

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_example);

findViewById(R.id.first_button).setOnClickListener(onClickListener);

findViewById(R.id.second_button).setOnClickListener(onClickListener);

}

}

這樣寫體現了 composition over inheritance 的思想。它避免了上面的所有問題,看起來舒服得多。

不過,這樣還是讓閱讀代碼時很不方便——看到 onCreate 里面時,還不得不經常滾動到聲明 onClickListener 的地方去,并且在 onClick 中艱難的尋找真正和某個特定按鈕相關的代碼。當然這兩個問題之前那個版本也都無法避免。

另一件糟糕的事情是,不同按鈕的 listener 邏輯很可能是相對獨立的,放到同一個 onClickListener 里,還是很丑陋。

所以為了進一步避免這幾個問題,我一向都是用下面這樣的寫法:

public class ExampleActivity extends Activity {

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_example);

findViewById(R.id.first_button).setOnClickListener(new OnClickListener() {

@Override

public void onClick(final View v) {

// bla bla bla

}

});

findViewById(R.id.second_button).setOnClickListener(new OnClickListener() {

@Override

public void onClick(final View v) {

// bra bra bra

}

});

}

}

這樣的話,不同邏輯間相對獨立,看起來非常舒服,便于閱讀,并且讓我找回了寫 JavaScript 的舒暢感覺(劃掉)。

那么問題來了:為什么有的人不使用最后一種寫法呢,倒反是使用第一種寫法呢?

總結

以上是生活随笔為你收集整理的java 无类名实现接口_为什么很多人写 Java/Android 时,选择让同一个类实现多个接口,而不是用多个内部匿名类?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。