国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 中的 void 和 Kotlin 的 Unit

這篇具有很好參考價值的文章主要介紹了Java 中的 void 和 Kotlin 的 Unit。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1 Java 中的 void 和 Kotlin 中的 Unit

在 Java 中,如果定義的函數(shù)沒有返回值,就需要用 void 來修飾,即 void 不可以省略。這也在 Java 中不能說函數(shù)調(diào)用皆是表達式的原因,因為有些方法不具有返回值和類型信息,就不能算作是表達式。

Java 在語言層設(shè)計一個 Void 類。java.lang.Void 類類似于 java.lang.Integer,Integer 是為了對基本類型 int 的實例進行裝箱操作。Void 的設(shè)計則是為了對應(yīng) void。由于 void 表示沒有返回值,所以,Void 并不能具有實例,它繼承自 Object。

在 Kotlin 中,函數(shù)在所有的情況下都有返回值類型,所以 Kotlin 引入了 Unit 來代替 Java 中的 void 關(guān)鍵字。

Unit 和 int 一樣,都是一種類型,然而,Unit 不代表任何信息。那么,Kotlin 為什么要引入 Unit 呢?很大一個原因是函數(shù)式編程。

在 Kotlin 中,對象或者函數(shù)都有類型,如果方法的返回類型是 Unit 時,可以省略。

對比:

  • Java 中的 void 表示什么都不返回,Kotlin 中的 Unit 是一個真實的數(shù)據(jù)類型;
  • Java 中的 void 是一個關(guān)鍵字,Kotlin 中的 Unit 是一個類;

2 Any 和 Any? : 根類型

和 Object 作為 Java 類層級結(jié)構(gòu)的根差不多,Any 類型是 Kotlin 所有非空類型的超類型(非空類型的根)。

但是在 Java 中,Object 只是所有引用類型的超類型(引用類型的根),而基本數(shù)據(jù)類型并不是類層級結(jié)構(gòu)的一部分。這意味著當我們需要 Object 的時候,不得不使用像 java.lang.Integer 這樣的包裝類型來表示基本數(shù)據(jù)類型的值。

而在 Kotlin 中,Any 是所有類型的超類型(所有類型的根),包括像 Int 這樣的基本數(shù)據(jù)類型。

和 Java 一樣,把基本數(shù)據(jù)類型的值賦給 Any 類型的變量時會自動裝箱:

val answer: Any = 42 // Any 是引用類型,所以值 42 會被裝箱

注意 Any 是非空類型,所以 Any 類型的變量不可以持有 null 值。在 Kotlin 中如果我們需要可以持有任何可能值的變量,包括 null 在內(nèi),必須使用 Any? 類型。

在底層,Any 類型對應(yīng) java.lang.Object。Kotlin 把 Java 方法參數(shù)和返回類型中用到的 Object 類型看作 Any。當 Kotlin 函數(shù)使用 Any 時,它會被編譯成 Java 字節(jié)碼中的 Object。

所有的 Kotlin 類中都包含:toString、equals 和 hashCode。這些方法都繼承自 Any。Any 并不能使用其他 java.lang.Object 的方法(比如 wait 和 notify),但是可以通過手動把值轉(zhuǎn)換成 java.lang.Object 來調(diào)用這些方法。

3 Nothing 類型:這個函數(shù)永不返回

對于某些 Kotlin 函數(shù)來說,“返回類型”的概念沒有任何意義,因為它們不會成功地結(jié)束。 例如,許多測試庫都有一個叫做 fail 的函數(shù),它通過拋出帶有特定消息的一場來讓當前測試失敗。一個包含無限循環(huán)的函數(shù)也永遠不會成功地結(jié)束。

當調(diào)用這樣的函數(shù)代碼時,知道函數(shù)永遠不會正常終止是很有幫助的。Kotlin 使用一種特殊的返回類型 Nothing 來表示:

fun main() {
    fail("Error occurred")
}

fun fail(message: String): Nothing {
    throw java.lang.IllegalStateException(message)
}

// Exception in thread "main" java.lang.IllegalStateException: Error occurred
// 	at com.ixuea.test.TestKt.fail(Test.kt:158)
// 	at com.ixuea.test.TestKt.main(Test.kt:152)
// 	at com.ixuea.test.TestKt.main(Test.kt)

Nothing 類型沒有任何值,只有被當作函數(shù)返回值使用,或者被當作泛型函數(shù)返回值的類型參數(shù)使用才會有意義。在其他所有情況下,聲明一個不能存儲任何值的變量沒有任何意義。

Nothing 是沒有任何實例的類型,Nothing 類型的表達式不會產(chǎn)生任何值。需要注意的是,任何返回值為 Nothing 的表達式之后的語句都是無法執(zhí)行的。這里有點像 return 或者 break 的作用。在 Kotlin 中 return、throw 等,返回值都是 Nothing。

注意,返回 Nothing 的函數(shù)可以放在 Elvis 運算符的右邊來做先決條件檢查:

val address = company.address ?: fail("No address")
println(address.city)

上面這個例子展示了在類型系統(tǒng)中擁有 Nothing 為什么極其有用。編譯器知道這種返回類型的函數(shù)從不正常終止,然后在分析調(diào)用這個函數(shù)的代碼時利用這個信息。在上面的例子中,編譯器會把 address 的類型推斷成非空,因為它為 null 時的分支處理會始終拋出異常。文章來源地址http://www.zghlxwxcb.cn/news/detail-843108.html

到了這里,關(guān)于Java 中的 void 和 Kotlin 的 Unit的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Android 安卓開發(fā)語言kotlin與Java該如何選擇

    Android 安卓開發(fā)語言kotlin與Java該如何選擇

    ????????如今在Android開發(fā)中,應(yīng)用層開發(fā)語言主要是Java和Kotlin,Kotlin是后來加入的,主導的語言還是Java。kotlin的加入仿佛讓會kotlin語言的開發(fā)者更屌一些,其實不然。 ????????有人說kotlin的引入是解決開發(fā)者復雜的邏輯,并且對空指針控制的比較友好,但是我們在開

    2024年02月11日
    瀏覽(93)
  • NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試

    NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試

    NetMock可讓我們擺脫在測試環(huán)境中模擬請求和響應(yīng)的復雜性。 NetMock 是一個功能強大、用戶友好的庫,旨在簡化模擬HTTP請求和響應(yīng)的過程。 對開發(fā)者來說,測試HTTP請求經(jīng)常會帶來一些挑戰(zhàn),因為要在測試環(huán)境中模擬請求和響應(yīng)的復雜性很高。這樣就會增加手動測試的時間和精

    2024年02月11日
    瀏覽(25)
  • 2023年最新IDEA中 Java程序 | Java+Kotlin混合開發(fā)的程序如何打包成jar包和exe文件(gradle版本)

    2023年最新IDEA中 Java程序 | Java+Kotlin混合開發(fā)的程序如何打包成jar包和exe文件(gradle版本)

    一. JAVA | JAVA和Kotlin混開開發(fā)的程序打包成jar方法 1.1 方法一 :IDEA中手動打包 1.2 方法二 :build.gradle中配置后編譯時打包 二. JAVA | JAVA和Kotlin混合開發(fā)的程序打包成exe的方法 純JAVA | 純Kotlin | JAVA和Kotlin混合開發(fā)打包其實都一樣的,因為jar包中主要還是class文件,而kotlin在編譯后

    2024年02月12日
    瀏覽(30)
  • 【Kotlin】Kotlin 與 Java 互操作 ① ( 變量可空性 | Kotlin 類型映射 | Kotlin 訪問私有屬性 | Java 調(diào)用 Kotlin 函數(shù) )

    【Kotlin】Kotlin 與 Java 互操作 ① ( 變量可空性 | Kotlin 類型映射 | Kotlin 訪問私有屬性 | Java 調(diào)用 Kotlin 函數(shù) )

    在 Java 語言 中 , 任何 引用類型變量 都可以為 空 null ; Java 中 八種 基本數(shù)據(jù)類型 變量 的 默認值 為 0 或 false ; 但是在 Kotlin 語言 中 , 所有的 變量 都是引用類型變量 , 沒有基本數(shù)據(jù)類型 , 默認情況下 所有的變量 都為 非空類型 ; 下面分別定義一個 Java 類 和 Kotlin 腳本 , 在 K

    2024年02月02日
    瀏覽(36)
  • From Java To Kotlin 2:Kotlin 類型系統(tǒng)與泛型

    上期主要分享了 From Java To Kotlin 1 :空安全、擴展、函數(shù)、Lambda。 這是 From Java ?to Kotlin ? 第二期。 From Java ?to Kotlin ?關(guān)鍵在于 思維的轉(zhuǎn)變 。 Kotlin 中大部分語句是 表達式 。 表達式思維是一種編程思維。 編程思維是一種非常抽象的概念,很多時候是只可意會不可言傳的。

    2024年02月08日
    瀏覽(21)
  • kotlin 轉(zhuǎn) Java

    kotlin 轉(zhuǎn) Java

    今天突然想研究下有些kotlin文件轉(zhuǎn)為Java到底長什么樣,好方便優(yōu)化kotlin代碼,搞了半天發(fā)現(xiàn)一個非常簡單的Android Studio或者Intellij idea官方插件Kotlin,Kotlin是插件的名字,真是醉了; 這里以AS為例,使用很簡單: 1.左邊目錄欄找到想要的轉(zhuǎn)化的kotlin文件,選中,然后頂部Tools

    2024年02月10日
    瀏覽(21)
  • kotlin 和 java 的區(qū)別

    Kotlin(科特林)是一個用于現(xiàn)代多平臺應(yīng)用的靜態(tài)編程語言,由 JetBrains 開發(fā)。Kotlin可以編譯成Java字節(jié)碼,也可以編譯成JavaScript,方便在沒有JVM的設(shè)備上運行。除此之外Kotlin還可以編譯成二進制代碼直接運行在機器上(例如嵌入式設(shè)備或 iOS)。 其基礎(chǔ)編譯器(他們將其改為

    2024年01月22日
    瀏覽(14)
  • 【Kotlin】從Java轉(zhuǎn)向Kotlin,耐心看完這篇博客就夠了。Kotlin快速入門教程分享

    【Kotlin】從Java轉(zhuǎn)向Kotlin,耐心看完這篇博客就夠了。Kotlin快速入門教程分享

    適合群體:Java已經(jīng)入門的人,如果是零基礎(chǔ),不要勉強!雖然沒有深奧的術(shù)語,即使有也盡可能通俗易懂 。 Kotlin和Java都是Jvm語言,相同的部分能省則省(篇幅有限),重點是Kotlin。 示例代碼的注釋很重要。最好可以使用IDEA等開發(fā)工具運行一下。 最后創(chuàng)作不易,全部都是自

    2023年04月08日
    瀏覽(48)
  • 【Kotlin】Kotlin 與 Java 互操作 ② ( @JvmField 注解字段給 Java | @JvmOverloads 注解修飾函數(shù) | @JvmStatic 注解聲明靜態(tài)成員 )

    【Kotlin】Kotlin 與 Java 互操作 ② ( @JvmField 注解字段給 Java | @JvmOverloads 注解修飾函數(shù) | @JvmStatic 注解聲明靜態(tài)成員 )

    在 Java 中是 不能直接訪問 Kotlin 中的字段 的 , 必須 調(diào)用相應(yīng)的 Getter 和 Setter 方法 , 才能進行訪問 ; 代碼示例 : Kotlin 類 : 在 Kotlin 中聲明的成員屬性 , 默認就是 private 私有屬性 , 默認為其生成了 Getter 和 Setter 方法 ; Java 類直接調(diào)用 : 在 Java 類中 , 不能直接調(diào)用 Kotlin 字段 ; 在

    2024年02月02日
    瀏覽(15)
  • 【Java】java和kotlin關(guān)于Json寫文件

    Java寫json文件 Kotlin寫json文件

    2024年02月14日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包