@Documented @Retention(value=RUNTIME) @Target(value={CONSTRUCTOR,METHOD}) public @interface SafeVarargs
コンパイラは、この注釈型の@Target
メタ注釈によって課される使用制限のほかに、その追加の使用制限を実装する必要があります。メソッドまたはコンストラクタの宣言に@SafeVarargs
注釈が付いていて、次のいずれかが成り立つ場合、コンパイル時にエラーが発生します。
static
でもfinal
でもない可変引数メソッドである
メソッドまたはコンストラクタの宣言にこの注釈型が適用され、かつ次が成り立つ場合には、コンパイラから警告が発行されることが推奨されます。
Object
やString
を含む)を持つ。(この注釈型で抑制される未検査警告は、型情報保持可能な要素型ではまだ起こらない。)
実行時に@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! }
ClassCastException
が発生します。
プラットフォームの将来のバージョンでは、そのような安全でない操作ではコンパイラのエラーが必須となる可能性があります。
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.