亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kotlin怎么使用

發布時間:2022-03-22 10:27:15 來源:億速云 閱讀:131 作者:iii 欄目:編程語言

今天小編給大家分享一下Kotlin怎么使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Kotlin怎么使用

1. 如何定義變量

Java 定義變量的寫法:

String string = "Hello";

基本等價的 Kotlin 定義變量的寫法:

var string: String = "Hello"

Java 定義 final 變量的寫法:

final String string = "Hello";

注意到前面的是一個編譯期常量,Kotlin 當中應該這么寫:

const val string: String = "Hello"

同樣是 final 變量,Java 這么寫:

final String string = getString();

注意到,這個不是編譯期常量,Kotlin 這么寫:

val string: String = getString()

另外, Kotlin 有類型推導的特性,因此上述變量定義基本上都可以省略掉類型 String。

2. 如何定義函數

Java 當中如何定義函數,也就是方法,需要定義到一個類當中:

public boolean testString(String name){  ...  }

等價的 Kotlin 寫法:

fun testString(name: String): Boolean {     ... }

注意到返回值的位置放到了參數之后。

3. 如何定義靜態變量、方法

Java 的靜態方法或者變量只需要加一個 static 即可:

public class Singleton{     private static Singleton instance = ...;      public static Singleton getInstance(){         ...         return instance;     } }

用 Kotlin 直譯過來就是:

class KotlinSingleton{     companion object{         private val kotlinSingleton = KotlinSingleton()          @JvmStatic         fun getInstance() = kotlinSingleton      } }

注意 getInstance 的寫法。 JvmStatic 這個注解會將 getInstance 這個方法編譯成與 Java  的靜態方法一樣的簽名,如果不加這個注解,Java 當中無法像調用 Java 靜態方法那樣調用這個方法。

另外,對于靜態方法、變量的場景,在 Kotlin 當中建議使用包級函數。

4. 如何定義數組

Java 的數組非常簡單,當然也有些抽象,畢竟是編譯期生成的類:

String[] names = new String[]{"Kyo", "Ryu", "Iory"};  String[] emptyStrings = new String[10];

Kotlin 的數組其實更真實一些,看上去更讓人容易理解:

val names: Array<String> = arrayOf("Kyo", "Ryu", "Iory") val emptyStrings: Array<String?> = arrayOfNulls(10)

注意到,Array T 即數組元素的類型。另外,String? 表示可以為 null 的 String 類型。

數組的使用基本一致。需要注意的是,為了避免裝箱和拆箱的開銷,Kotlin 對基本類型包括  Int、Short、Byte、Long、Float、Double、Char 等基本類型提供了定制版數組類型,寫法為 XArray,例如 Int 的定制版數組為  IntArray,如果我們要定義一個整型數組,寫法如下:

val ints = intArrayOf(1, 3, 5)

5. 如何寫變長參數

Java 的變長參數寫法如下:

void hello(String... names){     ... }

Kotlin 的變長參數寫法如下:

fun hello(vararg names: String){  }

6. 如何寫三元運算符

Java 可以寫三元運算符:

int code = isSuccessfully? 200: 400;

很多人抱怨 Kotlin 為什么沒有這個運算符。。。據說是因為 Kotlin 當中 : 使用的場景比 Java  復雜得多,因此如果加上這個三元運算符的話,會給語法解析器帶來較多的麻煩,Scala 也是類似的情況。那么這中情況下,我們用 Kotlin 該怎么寫呢?

int code = if(isSuccessfully) 200 else 400

注意到,if else 這樣的語句也是表達式,這一點與 Java 不同。

7. 如何寫 main 函數

Java 的寫法只有一種:

class Main{     public static void main(String... args){         ...     } }

注意到參數可以是變長參數或者數組,這二者都可。

對應 Kotlin,main 函數的寫法如下:

class KotlinMain{     companion object{         @JvmStatic         fun main(args: Array<String>) {          }     } }

Kotlin 可以有包級函數,因此我們并不需要聲明一個類來包裝 main 函數:

fun main(args: Array<String>){     ... }

8. 如何實例化類

Java 和 C++ 這樣的語言,在構造對象的時候經常需要用到 new 這個關鍵字,比如:

Date date = new Date();

Kotlin 構造對象時,不需要 new 這個關鍵字,所以上述寫法等價于:

val date = Date()

9. 如何寫 Getter 和 Setter 方法

Java 的 Getter 和 Setter 是一種約定俗稱,而不是語法特性,所以定義起來相對自由:

public class GetterAndSetter{     private int x = 0;      public int getX() {         return x;     }      public void setX(int x) {         this.x = x;     } }

Kotlin 是有屬性的:

class KotlinGetterAndSetter{     var x: Int = 0         set(value) { field = value }         get() = field }

注意看到,我們為 x 顯式定義了 getter 和 setter,field 是 x 背后真正的變量,所以 setter 當中其實就是為 field  賦值,而 getter 則是返回 field。如果你想要對 x 的訪問做控制,那么你就可以通過自定義 getter 和 setter 來實現了:

class KotlinGetterAndSetter{     var x: Int = 0         set(value) {             val date = Calendar.getInstance().apply {                 set(2017, 2, 18)             }             if(System.currentTimeMillis() < date.timeInMillis){                 println("Cannot be set before 2017.3.18")             }else{                 field = value             }         }         get(){             println("Get field x: $field")             return field         }    }

10. 如何延遲初始化成員變量

Java 定義的類成員變量如果不初始化,那么基本類型被初始化為其默認值,比如 int 初始化為 0,boolean 初始化為  false,非基本類型的成員則會被初始化為 null。

public class Hello{     private String name; }

類似的代碼在 Kotlin 當中直譯為:

class Hello{     private var name: String? = null }

使用了可空類型,副作用就是后面每次你想要用 name 的時候,都需要判斷其是否為 null。如果不使用可控類型,需要加 lateinit 關鍵字:

class Hello{     private lateinit var name: String }

lateinit 是用來告訴編譯器,name 這個變量后續會妥善處置的。

對于 final 的成員變量,Java 要求它們必須在構造方法或者構造塊當中對他們進行初始化:

public class Hello{     private final String name = "Peter"; }

也就是說,如果我要想定義一個可以延遲到一定實際再使用并初始化的 final 變量,這在 Java 中是做不到的。

Kotlin 有辦法,使用 lazy 這個 delegate 即可:

class Hello{     private val name by lazy{         NameProvider.getName()      } }

只有使用到 name 這個屬性的時候,lazy 后面的 Lambda 才會執行,name 的值才會真正計算出來。

11. 如何獲得 class 的實例

Java 當中:

public class Hello{     ... }  ...  Class<?> clazz = Hello.class;  Hello hello = new Hello(); Class<?> clazz2 = hello.getClass();

前面我們展示了兩種獲得 class 的途徑,一種直接用類名,一種通過類實例。剛剛接觸 Kotlin 的時候,獲取 Java Class  的方法卻是容易讓人困惑。

class Hello  val clazz = Hello::class.java  val hello = Hello() val clazz2 = hello.javaClass

同樣效果的 Kotlin 代碼看上去確實很奇怪,實際上 Hello::class 拿到的是 Kotlin 的 KClass,這個是 Kotlin  的類型,如果想要拿到 Java 的 Class 實例,那么就需要前面的辦法了。

以上就是“Kotlin怎么使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克陶县| 普陀区| 内江市| 光泽县| 称多县| 南华县| 廉江市| 普陀区| 库伦旗| 金川县| 建阳市| 红桥区| 兰考县| 喜德县| 抚顺县| 古蔺县| 元朗区| 舒城县| 天等县| 江油市| 图木舒克市| 凌云县| 全州县| 全南县| 宕昌县| 永昌县| 运城市| 乌拉特前旗| 阿鲁科尔沁旗| 和平县| 南汇区| 沁水县| 准格尔旗| 武乡县| 益阳市| 张家口市| 汽车| 固镇县| 板桥市| 九江市| 和田县|