<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      kotlin更多語言結(jié)構(gòu)——>選擇加入要求

        1.3.70 中引入了 @RequireOptIn 與 @OptIn 注解以取代先前使用的 @Experimental 與 @UseExperimental;同時 -Xopt-in 編譯器選項也取代了 -Xuse-experimental。

        Kotlin 標準庫提供了一種機制,用于要求并明確同意使用 API 的某些元素。通過這種機制,庫開發(fā)人員可以將使 用其 API 需要選擇加入的特定條件告知用戶,例如,如果某個 API 處于實驗狀態(tài),并且將來可能會更改。

        為了避免潛在的問題,編譯器會向此類 API 的用戶發(fā)出警告,告知他們這些條件,并要求他們在使用 API 之前選 擇加入

       

      選擇使用API

        如果庫作者將一個庫的 API 聲明標記為要求選擇加入 你應該明確同意在代碼中使用它。有多種方式可以選擇加入使用此類 API,所有方法均不受技術(shù)限制。你可以自由選擇最適合自己的方式。

       

      傳播選擇加入

        在使用供第三方(庫)使用的 API 時,你也可以把其選擇加入的要求傳播到自己的 API。為此,請在你的 API 主體 聲明中添加注解 要求選擇加入的注解。這可以讓你使用帶有此注解的 API 元素。

      // 庫代碼
      @RequiresOptIn(message = "This API is experimental. It may be changed in the future without notice.")
      @Retention(AnnotationRetention.BINARY)
      @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
      annotation class MyDateTime // 要求選擇加入的注解
      @MyDateTime
      class DateProvider // 要求選擇加入的類
      

        

      // 客戶端代碼
      fun getYear(): Int {
          val dateProvider: DateProvider // 錯誤:DateProvider 要求選擇加入
          // ...
      }
      @MyDateTime
      fun getDate(): Date {
          val dateProvider: DateProvider // OK:該函數(shù)也需要選擇加入 
          // ...
      }
      fun displayDate() {
          println(getDate()) // 錯誤:getDate() 需要選擇加入
      }
      

        如本例所示,帶注釋的函數(shù)看起來是 @MyDateTime API 的一部分。因此,這種選擇加入會將選擇加入的要求 傳播到客戶端代碼;其客戶將看到相同的警告消息,并且也必須同意。要使用多個需要選擇加入的API,請在聲明中標記所有需要選擇加入的注解

       

      非傳播的用法

        在不公開其自身API的模塊(例如應用程序)中,你可以選擇使用 API 而無需將選擇加入的要求傳播到代碼中。這種情況下,請使用 @OptIn 標記你的聲明,并以要求選擇加入的注解作為參數(shù)

      // 庫代碼
      @RequiresOptIn(message = "This API is experimental. It may be changed in the future without notice.")
      @Retention(AnnotationRetention.BINARY)
      @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
      annotation class MyDateTime // 要求選擇加入的注解
      
      @MyDateTime
      class DateProvider // 要求選擇加入的類
      

        

      //客戶端代碼
      @OptIn(MyDateTime::class)
      fun getDate(): Date { // 使用 DateProvider;不傳播選擇加入的要求
      val dateProvider: DateProvider
          // ...
      }
      
      fun displayDate() {
          println(getDate()) // OK:不要求選擇加入
      }
      

        當有人調(diào)用函數(shù) getDate() 時,不會通知他們函數(shù)主體中使用的選擇加入 API 的要求。

        要在一個文件的所有函數(shù)和類中使用要求選擇加入的 API,請在文件的頂部,文件包說明和導入聲明前添加文件級注釋 @file:OptIn

       //客戶端代碼 
      @file:OptIn(MyDateTime::class)
      

        

      模塊范圍的選擇加入

        如果你不想在使用要求選擇加入 API 的每個地方都添加注解,則可以為整個模塊選擇加入這些 API。要選擇在 模塊中使用 API,請使用參數(shù) -Xopt-in 進行編譯,使用 -Xopt-in = org.mylibrary.OptInAnnotation 指定該 API 使用的要求選擇加入注解的標準名稱。使用此參數(shù)進行編 譯的效果與模塊中每個聲明都有注解 @OptIn(OptInAnnotation::class) 的效果相同。

        如果使用 Gradle 構(gòu)建模塊,可以添加如下參數(shù)

      tasks.withType(KotlinCompile).configureEach {
           kotlinOptions {
              freeCompilerArgs += "-Xopt-in=org.mylibrary.OptInAnnotation" 
          }
      }
      

        

      tasks.withType<KotlinCompile>().configureEach {
          kotlinOptions.freeCompilerArgs += "-Xopt-in=org.mylibrary.OptInAnnotation"
      }
      

        如果你的 Gradle 模塊是多平臺模塊,請使用 useExperimentalAnnotation 方法

      sourceSets {
          all {
              languageSettings { 
                  useExperimentalAnnotation('org.mylibrary.OptInAnnotation')
              } 
          }
      }
      

        

      sourceSets {
          all {
              languageSettings.useExperimentalAnnotation("org.mylibrary.OptInAnnotation") 
          }
      }
      

        對于 Maven,它將是:

      <build>
          <plugins>
              <plugin>
                  <groupId>org.jetbrains.kotlin</groupId>
                  <artifactId>kotlin-maven-plugin</artifactId>
                  <version>${ kotlin.version }</version>
                  <executions>...</executions>
                  <configuration>
                      <args>
                          <arg>-Xopt-in =org.mylibrary.OptInAnnotation</arg>
                      </args>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      

        要在模塊級別選擇加入多個 API,請為每個要求選擇加入的 API 添加以上描述的參數(shù)之一

       

      要求選擇加入 API

      要求選擇加入的注解

        如果想獲得使用者使用你的模塊 API 的明確同意,請創(chuàng)建一個注解類,作為_要求選擇加入的注解_。這個類必須 使用 @RequiresOptIn 注解:

      @RequiresOptIn
      @Retention(AnnotationRetention.BINARY) 
      @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) 
      annotation class MyDateTime
      

        

        要求選擇加入的注解必須滿足以下幾個要求:

          — BINARY retention
          — targets中沒有 EXPRESSION 與 FILE

          — 沒有參數(shù)

        選擇加入的要求可以具有以下兩個嚴格級別之一:

          — RequiresOptIn.Level.ERROR 。選擇加入是強制性的。否則,使用標記 API 的代碼將無法編譯。默認級別。

          — RequiresOptIn.Level.WARNING 。選擇加入不是強制性的,而是建議使用的。沒有它,編譯器會發(fā)出警告。

        要設置所需的級別,請指定 @RequiresOptIn 注解的 level 參數(shù)

       

        另外,你可以提供一個 message 來通知用戶有關(guān)使用該 API 的特定條件。編譯器會將其顯示給使用該 API 但未選擇加入的用戶

      @RequiresOptIn(level = RequiresOptIn.Level.WARNING, message = "This API is experimental. It can be incompatibly changed in the future.")
      @Retention(AnnotationRetention.BINARY)
      @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
      annotation class ExperimentalDateTime
      

        如果你發(fā)布了多個需要選擇加入的獨立功能,請為每個功能聲明一個注解。這使你的用戶可以更安全地使用 API:他們只能使用其明確接受的功能。這也使你可以獨立地從功能中刪除選擇加入的要求

       

      標記 API 元素

        要在使用 API 時要求選擇加入,請給它的聲明添加要求選擇加入的注解

      @MyDateTime
      class DateProvider
      
      @MyDateTime
      fun getTime(): Time {}
      

        

      穩(wěn)定前 API 的選擇加入要求

        如果要求選擇加入尚未穩(wěn)定的特性,請仔細處理 API 由實驗狀態(tài)到穩(wěn)定狀態(tài)的轉(zhuǎn)換,以避免破壞客戶端代碼。

        當穩(wěn)定前 API 穩(wěn)定之后并以穩(wěn)定狀態(tài)發(fā)布后,請從聲明中刪除其要求選擇加入的注解。客戶端將可以不受限制 地使用它們。但是,你應該將注解類留在模塊中,以便與現(xiàn)有的客戶端代碼保持兼容。

        為了讓 API 用戶相應地更新其模塊(從代碼中刪除注解并重新編譯),請將注解標記為 @Deprecated 并在棄 用 message 中提供說明

      @Deprecated("This opt-in requirement is not used anymore. Remove its usages from your code.") 
      @RequiresOptIn
      annotation class ExperimentalDateTime
      

        

       

      選擇加入要求的實驗狀態(tài)

        選擇加入要求的機制在 Kotlin 1.3 中是實驗性的。這意味著在將來的版本中,可能會以不兼容的方式進行更改。

         為了讓使用注解 @OptIn 和 @RequiresOptIn 的用戶了解其實驗狀態(tài),編譯器會在編譯代碼時發(fā)出警告:

        This class can only be used with the compiler argument '-Xopt- in=kotlin.RequiresOptIn'

        要移除警告,請?zhí)砑泳幾g器參數(shù) -Xopt-in=kotlin.RequiresOptIn 。

       

       

       

       

       

      posted @ 2022-01-28 02:57  王世楨  閱讀(284)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 美女无遮挡免费视频网站| 久久天堂无码av网站| 欧美牲交a欧美牲交aⅴ图片| 丝袜a∨在线一区二区三区不卡| 亚洲精品免费一二三区| 欧美肥妇毛多水多bbxx| 亚洲色在线v中文字幕| 精品一二三四区在线观看| 四虎影视一区二区精品| 最新午夜男女福利片视频| 国产精品美女免费无遮挡| 九九九国产| 亚洲人成网站77777在线观看| 国产自产对白一区| 天堂va亚洲va欧美va国产| 日韩精品中文字幕人妻| 国产精品香港三级国产av| 亚洲一卡2卡3卡4卡精品| 遂昌县| 欧美亚洲国产成人一区二区三区| 美女裸体黄网站18禁止免费下载| 欲香欲色天天天综合和网| 久久久久蜜桃精品成人片公司| 日本高清视频网站www| 丰满熟妇人妻中文字幕| 白嫩人妻精品一二三四区| 2021国产成人精品久久| 亚洲熟妇国产熟妇肥婆| 免费观看国产女人高潮视频| 亚洲av无码精品蜜桃| 久久精品无码专区免费东京热| 人妻中文字幕一区二区三 | 男人扒开女人内裤强吻桶进去| av永久免费网站在线观看| 国产尤物精品自在拍视频首页| 90后极品粉嫩小泬20p| 在线综合亚洲欧洲综合网站| 最新国产精品好看的精品| 中文字幕亚洲综合久久| 性xxxx搡xxxxx搡欧美| 日本午夜精品一区二区三区电影|