Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9で拡張された@SafeVarargsアノテーション:プライベートインスタンスメソッドへの適用

@SafeVarargsアノテーションは、Java 7で導入されました。このアノテーションは、可変長引数(varargs)を受け取るfinalメソッドstaticメソッド、またはコンストラクタに適用できます。その主な目的は、メソッドが可変長引数のパラメータに対して安全でない操作を実行しないことを保証することです。

そしてJava 9以降@SafeVarargsアノテーションはプライベートなインスタンスメソッドにも適用できるようになりました。これにより、より幅広い場面でヒープ汚染(heap pollution)に関する警告を抑制できるようになっています。

構文

@SafeVarargs
private void methodName(...) {
    // 何らかの処理
}

コード例

import java.util.ArrayList;
import java.util.List;
public class SafevarargsTest {
    @SafeVarargs   // プライベートメソッドに@SafeVarargsを適用
    private void display(List<String>... names) {
        for(List<String> name : names) {
            System.out.println(name);
        }
    }
    public static void main(String args[]) {
        SafevarargsTest test = new SafevarargsTest();
        List<String> list = new ArrayList<String>();
        list.add("TutorialsPoint");
        list.add("Tutorix");
        test.display(list);
    }
}

実行結果

[TutorialsPoint, Tutorix]

上記の例では、プライベートなインスタンスメソッドdisplay()@SafeVarargsを付けています。Java 8以前ではコンパイルエラーとなりましたが、Java 9以降は問題なくコンパイル・実行できます。可変長引数として渡されるジェネリクス型のリストが、メソッド内部で書き換えられることなく読み取りのみに使われているため、安全であると宣言できるのです。

  1. Java 9における@Deprecatedアノテーションの改善点とは?新要素「since」「forRemoval」を徹底解説

    @Deprecatedアノテーションとはクラス、メソッド、フィールドなど、プログラム内のあらゆる要素に付与できる@Deprecatedアノテーションは、「その要素はもはや使用すべきではない」ことを示すためのものです。要素が非推奨とされる主な理由は以下の通りです。使用すると危険であり、エラーを引き起こす可能性がある将来のバージョンで互換性がなくなる可能性がある将来のバージョンで削除される可能性があるより優れた、効率的な代替手段がすでに提供されているJava 9で追加された2つの新しい要素Java 9では、@DeprecatedアノテーションにsinceとforRemovalという2つの新しい属性

  2. JavaのJListで使える選択モードは何種類?3つのモードの違いを解説

    JListは、JComponentクラスを継承したSwingコンポーネントの一つで、オブジェクトのリストを画面に表示し、ユーザーがその中から1つ以上の項目を選択できるようにするためのものです。 JavaのJListには、用途に応じて使い分けられる3種類の選択モードが用意されています。 ListSelectionModel.SINGLE_SELECTION:一度に選択できるのは、リスト内の1つのインデックスだけです。 ListSelectionModel.SINGLE_INTERVAL_SELECTION:一度に選択できるのは、1つの連続した区間(連続するインデックスの範囲)だけです。 Lis