鴻蒙OS SafeVarargs

2022-06-06 16:21 更新

SafeVarargs

  1. @Documented
  2. @Retention(RUNTIME)
  3. @Target({CONSTRUCTOR,METHOD})
  4. public @interface SafeVarargs

程序員斷言帶注釋的方法或構(gòu)造函數(shù)的主體不會對其 varargs 參數(shù)執(zhí)行潛在的不安全操作。 將此注釋應(yīng)用于方法或構(gòu)造函數(shù)會抑制有關(guān)不可具體化的變量 arity (vararg) 類型的未經(jīng)檢查的警告,并抑制有關(guān)在調(diào)用站點創(chuàng)建參數(shù)化數(shù)組的未經(jīng)檢查的警告。

除了 Target 元注解施加的使用限制外,編譯器還需要對該注解類型實施額外的使用限制; 如果使用 @SafeVarargs 注釋對方法或構(gòu)造函數(shù)聲明進行注釋,則這是編譯時錯誤,并且:

  • 聲明是固定數(shù)量的方法或構(gòu)造函數(shù)
  • 聲明是一個既不是靜態(tài)也不是最終的變量arity 方法。

鼓勵編譯器在將此注釋類型應(yīng)用于方法或構(gòu)造函數(shù)聲明時發(fā)出警告,其中:

  • 可變arity 參數(shù)具有可具體化的元素類型,包括原始類型、Object 和String。 (對于可具體化的元素類型,此注釋類型抑制的未經(jīng)檢查的警告已經(jīng)不會出現(xiàn)。)

  • 方法或構(gòu)造函數(shù)聲明的主體執(zhí)行潛在的不安全操作,例如對變量 arity 參數(shù)數(shù)組的元素的賦值會生成未經(jīng)檢查的警告。 一些不安全的操作不會觸發(fā)未經(jīng)檢查的警告。 例如,別名在

  1. @SafeVarargs // Not actually safe!
  2. static void m(List<String>... stringLists) {
  3. Object[] array = stringLists;
  4. List<Integer> tmpList = Arrays.asList(42);
  5. array[0] = tmpList; // Semantically invalid, but compiles without warnings
  6. String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!
  7. }

在運行時導(dǎo)致 ClassCastException。

該平臺的未來版本可能會要求此類不安全操作出現(xiàn)編譯器錯誤。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號