鴻蒙OS SafeVarargs

2022-06-06 16:21 更新

SafeVarargs

@Documented
@Retention(RUNTIME)
@Target({CONSTRUCTOR,METHOD})
public @interface SafeVarargs

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

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

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

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

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

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

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

在運(yùn)行時(shí)導(dǎo)致 ClassCastException。

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)