欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Kotlin中的面向?qū)ο螅ǘ?/h1>
 更新時間:2017年06月20日 10:10:20   投稿:lqh  
這篇文章主要介紹了詳解Kotlin中的面向?qū)ο螅ǘ┑南嚓P(guān)資料,需要的朋友可以參考下

詳解Kotlin中的面向?qū)ο螅ǘ?/strong>

Kotlin中的面向?qū)ο螅ㄒ唬?/a>中,介紹了Kotlin類的相關(guān)操作,本文將在上文的基礎(chǔ)上,繼續(xù)介紹屬性、接口等同樣重要的面向?qū)ο蟮墓δ堋?br />

屬性

class AttrDemo{ 
 private var attr1 : String = ""; 
 protected var attr2 : String = ""; 
 public var attr3 : String = ""; 
 
 var varattr : String = ""; 
 val valattr : String = ""; 
 
 var attr = 1; 
} 

屬性是每個對象中最基本的單位,也是必不可少的一部分,與Java一樣,Kotlin也提供了private、protected、public三種聲明變量的方式,不同的是,在Kotlin中如果沒聲明訪問權(quán)限,默認認為是public類型,即在其他任何地方都可以訪問。同時,Kotlin提供了var和val用來表示屬性的讀寫權(quán)限,var是可讀寫的變量,val則是只讀變量,類似于Java中的final。

需要注意,Kotlin對于空安全的要求非常嚴格,所以對于所有的屬性都需要進行初始化,因此也可以通過直接賦值的方式說明屬性的類型,不一定非在后面通過冒號的方式追加。不過對于習(xí)慣Java語法的開發(fā)者而言可能還是會注明屬性的類型,而習(xí)慣腳本語言的開發(fā)者可能會傾向于直接賦值。

在Kotlin中,get和set方法不是必須的,因為Kotlin會自動對get和set方法進行處理,變成直接調(diào)用屬性的方式(可參考Kotlin的第一行代碼中的說明),但Kotlin還是有自己獨特的使用get和set的方式

private var attr1 : String 
get() = attr1.toString() 
set(value) { 
 attr1 = value 
} 
 
protected var attr2 : String 
get() { 
 //TODO GET 
 return attr2.toString() 
} 
set(value) { 
 attr2 = value 
} 

Kotlin提供了多種設(shè)置get和set的方法,上面的代碼中展示了兩種get方法和一種set方法,有時當(dāng)你希望改變get、set的訪問權(quán)限或是使用注解時,也可以直接對get、set進行操作

var attr4 : String = "" //一定要初始化 
private set 

接口

和Java類似,Kotlin使用interface作為接口的關(guān)鍵詞,和抽象類相比,他們都可以包含抽象的方法以及方法的實現(xiàn),但接口無法保存狀態(tài)。

interface mInterfaceDemo{ 
 fun function1() 
 fun function2(){ 
   
 } 
} 

和繼承的方式類似,實現(xiàn)接口也是使用冒號“:”,不過方法略有不同

class InterfaceDemoImpl : mInterfaceDemo{ 
 override fun function1() { 
  TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 
 } 
 
} 

我們可以在接口中申明屬性,但接口中的屬性要么是抽象的,要么提供訪問器的實現(xiàn)。接口屬性不可以有后備字段,而且訪問器不可以引用它們。

泛型

泛型是程序設(shè)計語言的一種特性。允許程序員在強類型程序設(shè)計語言中編寫代碼時定義一些可變部分,那些部分在使用前必須作出指明。像 java 一樣,Kotlin 中的類可以擁有類型參數(shù)

class GenericDemo<T>(t : T){ 
 var value = t 
} 

通常來說,我們需要這樣構(gòu)建一個對象

val generic: GenericDemo<Int> = GenericDemo<Int>(1) 

但如果類型是需要推斷的,也可以通過傳入忽略類型的參數(shù)進行創(chuàng)建

val generic = GenericDemo(1) 

嵌套類

Kotlin中的類也可以嵌套在別的類中

class Outer { 
 private val bar: Int = 1 
 class Nested { 
  fun foo() = 2 
 } 
} 

可以通過inner修飾符增加一個對外部類的引用,使得內(nèi)部類可以調(diào)用外部類的屬性

class Outer { 
 private val bar: Int = 1 
 inner class Inner { 
  fun foo() = bar 
 } 
} 
 
val demo = Outer().Inner().foo() //==1 

對于匿名內(nèi)部類,通過對象表達式進行創(chuàng)建

mvp_button.setOnClickListener(object : View.OnClickListener{ 
 override fun onClick(v: View?) { 
  TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 
 } 
}); 

如果對象是函數(shù)式的 java 接口的實例(比如只有一個抽象方法的 java 接口),我們可以用一個帶接口類型的 lambda 表達式創(chuàng)建它。

mvp_button.setOnClickListener { 
 startActivity(Intent(MainActivity@this,MVPActivity::class.java)) 
} 

枚舉類

枚舉類最基本的用法就是實現(xiàn)類型安全的枚舉,每個自舉常量都是一個對象。枚舉常量通過逗號分開。

enum class Direction { 
 EAST,NORTH,SOUTH,WEST 
} 

因為每個枚舉對象都是一個實例,所以我們可以對其進行初始化

enum class Color(val rgb: Int) { 
 RED(0xFF0000), 
 GREEN(0x00FF00), 
 BLUE(0x0000FF) 
} 

當(dāng)我們需要調(diào)用枚舉對象的內(nèi)容時,可以通過valueof獲取某個枚舉對象的值,或者通過values獲取所有枚舉對象

Direction.EAST 
Direction.valueOf("EAST"); 
Direction.values() 

需要注意,如果指定的名字在枚舉類中沒有任何匹配,那么valueOf()方法將會拋出參數(shù)異常

Kotlin中核面向?qū)ο笙嚓P(guān)的內(nèi)容就介紹到這里,相關(guān)的代碼均提交在github中,

本文源碼下載:http://xiazai.jb51.net/201706/yuanma/helloKotlin-master(jb51.net).rar

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java StringUtils字符串分割轉(zhuǎn)數(shù)組的實現(xiàn)

    Java StringUtils字符串分割轉(zhuǎn)數(shù)組的實現(xiàn)

    這篇文章主要介紹了Java StringUtils字符串分割轉(zhuǎn)數(shù)組的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • SpringBoot+easypoi實現(xiàn)數(shù)據(jù)的Excel導(dǎo)出

    SpringBoot+easypoi實現(xiàn)數(shù)據(jù)的Excel導(dǎo)出

    這篇文章主要為大家詳細介紹了SpringBoot+easypoi實現(xiàn)數(shù)據(jù)的Excel導(dǎo)出,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • SpringBoot+kaptcha實現(xiàn)驗證碼花式玩法詳解

    SpringBoot+kaptcha實現(xiàn)驗證碼花式玩法詳解

    這篇文章主要想和大家聊聊kaptcha的用法,畢竟這個已經(jīng)有16年歷史的玩意還在有人用,說明它的功能還是相當(dāng)強大的,感興趣的小伙伴可以了解一下
    2022-05-05
  • Java中常用阻塞隊列的問題小結(jié)

    Java中常用阻塞隊列的問題小結(jié)

    這篇文章主要介紹了Java常用阻塞隊列問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • Java8-Stream流操作List去重問題

    Java8-Stream流操作List去重問題

    這篇文章主要介紹了Java8-Stream流操作List去重問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 5分鐘快速學(xué)會spring boot整合JdbcTemplate的方法

    5分鐘快速學(xué)會spring boot整合JdbcTemplate的方法

    這篇文章主要給大家介紹了如何通過5分鐘快速學(xué)會spring boot整合JdbcTemplate的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用spring boot整合JdbcTemplate具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring BeanUtils忽略空值拷貝的方法示例代碼

    Spring BeanUtils忽略空值拷貝的方法示例代碼

    本文用示例介紹Spring(SpringBoot)如何使用BeanUtils拷貝對象屬性忽略空置,忽略null值拷貝屬性的用法,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-03-03
  • Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行

    Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行

    這篇文章主要介紹了Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行,本文是系列文章的第一篇,需要的朋友可以參考下
    2014-12-12
  • CentOS7和8中安裝Maven3.8.4的簡單步驟

    CentOS7和8中安裝Maven3.8.4的簡單步驟

    maven是屬于apache的一個工具,主要是對java進行編譯打包,解決依賴關(guān)系,下面這篇文章主要給大家介紹了關(guān)于CentOS7和8中安裝Maven3.8.4的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 詳解如何在Java中調(diào)用Python程序

    詳解如何在Java中調(diào)用Python程序

    今天給大家?guī)淼氖顷P(guān)于Java中調(diào)用Python程序的相關(guān)知識,文章有非常詳細的代碼示例,需要的朋友可以參考下
    2021-06-06

最新評論