日韩性视频-久久久蜜桃-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 时,选择让同一个类实现多个接口,而不是用多个内部匿名类?...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 午夜欧美成人 | 精品一区二区三区免费看 | www.色婷婷| 午夜性| 国产一区二区三区18 | 女人性做爰100部免费 | 国产大奶在线观看 | 蜜臀av无码精品人妻色欲 | www.69av.com| 九久久| 91在线观看免费高清完整版在线观看 | av大帝 | 国产精品理伦片 | 日韩精品极品视频在线观看免费 | 国产精品自拍99 | 婷婷亚洲五月色综合 | 亚洲熟女乱综合一区二区三区 | 秋葵视频在线 | 精品无码国产一区二区三区51安 | 成年人视频在线免费看 | 2014亚洲天堂 | 日韩美女在线 | 色戒在线免费 | 国产精品久久久久久久无码 | 五月天国产精品 | 亚洲香蕉一区 | 97超碰总站 | 高清日韩一区二区 | 黄页在线播放 | 超碰人人草人人干 | 中文字幕在线观看网址 | 日韩黄网站| 非洲黄色大片 | 毛片av网站| 91精品久久久久久久久中文字幕 | 久久久久久无码精品人妻一区二区 | 亚洲一级影片 | 国产欧美精品一区二区三区app | 日韩在线资源 | 亚洲国产精品福利 | 少妇太爽了太深了太硬了 | 天天操天天干天天干 | 91精品国产综合久久久密臀九色 | 国产高潮又爽又无遮挡又免费 | 牛牛电影国产一区二区 | 婷婷激情社区 | 日韩欧美精品在线视频 | 成人不卡视频 | 丰满熟妇乱又伦 | av网址免费 | 天天综合天天干 | 亚洲国产欧美在线观看 | 四色网址 | 国模精品视频一区二区 | 国产精品一二三四五区 | 毛片a | 日皮在线观看 | 国产精品情侣自拍 | 亚洲乱码一区二区三区在线观看 | 亚洲精品美女 | 精品在线免费视频 | 调教一区| 性xxxx欧美 | 黄色天堂av| 91在线日本| 国产99自拍 | 午夜视频在线免费播放 | av不卡在线看 | 欧美亚洲综合久久 | 国产视频综合 | 欧美先锋影音 | 亚洲一区二区伦理 | www.青青草.com | 国产精品不卡av | 性生交大片免费看狂欲 | 69国产| 少妇av导航 | 亚洲熟伦熟女新五十路熟妇 | 成人欧美在线观看 | 无码人妻精品一区二区中文 | 亚洲巨乳 | 视频一区中文字幕 | 日韩一区二区在线播放 | 国产午夜精品福利 | 亚洲手机在线 | 亚洲综合在线中文字幕 | 日韩中文字幕网 | 最新中文字幕一区 | 少妇人妻真实偷人精品视频 | 国产精品午夜未成人免费观看 | 国产毛片在线视频 | 天堂在线中文8 | 永久免费精品视频 | 亚洲综合久久av一区二区三区 | 成人av视屏| 蜜桃视频在线观看一区二区 | 日本亲近相奷中文字幕 | 免费成人黄色网址 | 日本免费在线一区 |