Kotlin For Android 筆記(三)

1碎浇、Inheritance(繼承)

使用 @JvmOverloads 可以極大的簡化構(gòu)造函數(shù)的模板代碼
Java 版本

class CustomView : View {
  constructor(context: Context?) : this(context, null)
  constructor(context: Context?, attrs: AttributeSet?) :
  this(context, attrs, 0)
  constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    //...
  }
}

Kotlin 版本

class KotlinView @JvmOverloads constructor(
  context: Context,
  attrs: AttributeSet? = null,
  defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr)

因?yàn)槲覀兪褂昧?@JvmOverloads 注解,會生成如下字節(jié)碼:

public KotlinView(Context context) {
    super(context);
}
public KotlinView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
}
public KotlinView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

2、Interface(接口)

當(dāng)不同的接口有相同的簽名方法時(shí)沟蔑,在調(diào)用時(shí)蚀同,必須要明確寫明是哪個(gè)接口县好。例:

interface A {
  fun foo() {
    println("A")
  }
}
interface B {
  fun foo() {
    println("B")
  }
}

class Item : A, B {
  override fun foo() {
    println("Item")
  }
}
  //usage
  val item = Item()
  item.foo() //prints: Item

因?yàn)闆]有標(biāo)明具體的父類,所以革答,這里只調(diào)用到了自己的方法,沒調(diào)用接口的方法曙强。

如果需要接口中的方法被調(diào)用残拐,需要使用 super<接口名>.接口方法名 寫法

class Item : A, B { 
  override fun foo() { 
    val a = super<A>.foo() 
    val b = super<B>.foo()
    print("Item $a $b") 
  }
 }
  //usage 
  val item = Item() 
  item.foo() 
  //Prints: A B ItemsAB**

3、Object declaration

Java 版本

//synchronized
public class Singleton {
  private static Singleton instance = null;
  private Singleton(){
  }
  private synchronized static void createInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
  }
  public static Singleton getInstance() {
    if (instance == null) createInstance();
      return instance;
    }
}

在 Kotlin 中旗扑,我們使用 object 替代 class 關(guān)鍵字

object SQLiteSingleton {
  fun getAllUsers(): List<User> {
    //...
  }
}
//usage
SQLiteSingleton.getAllUsers()

4蹦骑、Object expression

Java 匿名類

ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
  //...
}
@Override
public void onServiceConnected(ComponentName name,
IBinder service)
{
  //...
}
}

Kotlin 匿名類

val serviceConnection = object: ServiceConnection {
  override fun onServiceDisconnected(name: ComponentName?) { }
  override fun onServiceConnected(name: ComponentName?,service: IBinder?) { }
}
val broadcastReceiver = object : BroadcastReceiver() {
  override fun onReceive(context: Context, intent: Intent) {
    println("Got a broadcast ${intent.action}")
  }
}
val intentFilter = IntentFilter("SomeAction");
registerReceiver(broadcastReceiver, intentFilter)

5、Enum

enum class Color {
    RED,
    ORANGE,
    BLUE,
    GRAY,
    VIOLET
}
val favouriteColor = Color.BLUE

Java 形式

val selectedColor = Color.valueOf("BLUE")
println(selectedColor == Color.BLUE) // prints: true

Kotlin 形式

val selectedColor = enumValueOf<Color>("BLUE")
println(selectedColor == Color.BLUE) // prints: true

Java 循環(huán)

for (color in Color.values()) {
    println("name: ${it.name}, ordinal: ${it.ordinal}")
}

Kotlin 循環(huán)

for (color in enumValues<Color>()) {
println("name: ${it.name}, ordinal: ${it.ordinal}")
}
// Prints:
name: RED, ordinal: 0
name: ORANGE, ordinal: 1
name: BLUE, ordinal: 2
name: GRAY, ordinal: 3
name: VIOLET, ordinal: 4

6臀防、Infix

data class Point(val x: Int, val y: Int) {
    infix fun moveRight(shift: Int) = Point(x + shift, y)
}
val pointA = Point(1,4)
// 不帶 . 的調(diào)用
val pointB = pointA moveRight 2
          或
val pointB = pointA.moveRight(2)
println(pointB) //prints: Point(x=3, y=4)

7眠菇、Sealed

sealed class Employee()
class Programmer : Employee()
class Manager : Employee()
object CEO : Employee()

sealed 本身就是 abstract 的,所以這里就把 abstract 省略了袱衷。sealed 的修飾符是 private 的捎废。

8、Import aliases

Qualified versus unqualified class name

import com.facebook.ads.InterstitialAd
val fbAd = InterstitialAd(context, "...") // Qualified
val googleAd = com.google.android.gms.ads.InterstitialAd(context) // Unqualified

Use Alias

import com.facebook.ads.InterstitialAd as FbAd
import com.google.android.gms.ads.InterstitialAd as GoogleAd
val fbAd = FbAd(context, "...")
val googleAd = GoogleAd(context)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末致燥,一起剝皮案震驚了整個(gè)濱河市登疗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖辐益,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件断傲,死亡現(xiàn)場離奇詭異,居然都是意外死亡智政,警方通過查閱死者的電腦和手機(jī)认罩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來续捂,“玉大人垦垂,你說我怎么就攤上這事⊙榔埃” “怎么了劫拗?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長矾克。 經(jīng)常有香客問我页慷,道長,這世上最難降的妖魔是什么聂渊? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任差购,我火速辦了婚禮,結(jié)果婚禮上汉嗽,老公的妹妹穿的比我還像新娘欲逃。我一直安慰自己,他們只是感情好饼暑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布稳析。 她就那樣靜靜地躺著,像睡著了一般弓叛。 火紅的嫁衣襯著肌膚如雪彰居。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天撰筷,我揣著相機(jī)與錄音陈惰,去河邊找鬼。 笑死毕籽,一個(gè)胖子當(dāng)著我的面吹牛抬闯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播关筒,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼溶握,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蒸播?” 一聲冷哼從身側(cè)響起睡榆,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萍肆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后胀屿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塘揣,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年碉纳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勿负。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馏艾。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劳曹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出琅摩,到底是詐尸還是另有隱情铁孵,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布房资,位于F島的核電站蜕劝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏轰异。R本人自食惡果不足惜岖沛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搭独。 院中可真熱鬧婴削,春花似錦、人聲如沸牙肝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽配椭。三九已至虫溜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間股缸,已是汗流浹背衡楞。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敦姻,地道東北人瘾境。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像替劈,于是被迫代替她去往敵國和親寄雀。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 寫在開頭:本人打算開始寫一個(gè)Kotlin系列的教程,一是使自己記憶和理解的更加深刻,二是可以分享給同樣想學(xué)習(xí)Kot...
    胡奚冰閱讀 1,424評論 5 11
  • Kotlin的類和接口與Java的類和接口是有一定的區(qū)別的。Kotlin的接口是可以包含屬性聲明卓嫂。Kotlin默認(rèn)...
    程自舟閱讀 10,338評論 0 11
  • 面向?qū)ο缶幊蹋∣OP) 在前面的章節(jié)中晨雳,我們學(xué)習(xí)了Kotlin的語言基礎(chǔ)知識行瑞、類型系統(tǒng)、集合類以及泛型相關(guān)的知識餐禁。...
    Tenderness4閱讀 4,444評論 1 6
  • 第一次知道kotlin這個(gè)語言是在JakeWharton的這個(gè)dex-method-list 項(xiàng)目里血久,本來這個(gè)項(xiàng)目...
    dodomix閱讀 13,378評論 4 15
  • 本文是在學(xué)習(xí)和使用kotlin時(shí)的一些總結(jié)與體會,一些代碼示例來自于網(wǎng)絡(luò)或Kotlin官方文檔帮非,持續(xù)更新... 對...
    竹塵居士閱讀 3,293評論 0 8