LoginSignup
1
1

More than 5 years have passed since last update.

JavaでstaticフィールドのList/Setの初期化に静的初期化ブロックを使う

Posted at

SpringAOPのソースコードを読んでいたら、こういうコードがあった(ノイズを除去するためにコードは調整済み)。

AspectJExpressionPointcut.java
public class AspectJExpressionPointcut  {
    private static final Set<PointcutPrimitive> SUPPORTED_PRIMITIVES = new HashSet();

    static {
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.EXECUTION);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.ARGS);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.REFERENCE);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.THIS);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.TARGET);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.WITHIN);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ANNOTATION);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_WITHIN);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ARGS);
        SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_TARGET);
        logger = LogFactory.getLog(AspectJExpressionPointcut.class);
    }
}

これは静的初期化ブロックと言われる仕組み。
これまで、staticで宣言したList/Setなどの初期化は↓のように書いていたけれど、静的初期化ブロックのほうがスッキリ見える気がする。

public class Hoge {
    private static final Set<PointcutPrimitive> SUPPORTED_PRIMITIVES = new HashSet(){{
        add(PointcutPrimitive.EXECUTION);
        add(PointcutPrimitive.ARGS);
        add(PointcutPrimitive.REFERENCE);
        add(PointcutPrimitive.THIS);
        add(PointcutPrimitive.TARGET);
        add(PointcutPrimitive.WITHIN);
        add(PointcutPrimitive.AT_ANNOTATION);
        add(PointcutPrimitive.AT_WITHIN);
        add(PointcutPrimitive.AT_ARGS);
        add(PointcutPrimitive.AT_TARGET);
    }};
}
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1