値がさまざまな属性を持つJava列挙型を作成しました。これらの属性は、次のいずれかの方法で保存できます。
フィールドの使用:
enum Eenum {
  V1(p1),
  V2(p2);
  private final A attr;
  public A attr() { return attr; }
  private Eenum(A attr) {
    this.attr = attr;
  }
}
抽象メソッドの使用:
enum Eenum {
  V1 {
    public A attr() { return p1; }
  },
  V2 {
    public A attr() { return p2; }
  }
  public abstract A attr();
}
クラスレベルマップの使用:
enum Eenum {
  V1,
  V2;
  public A attr() { return attrs.get(this); }
  private static final Map<Eenum, A> attrs;
  static {
    ImmutableMap.Builder<Eenum, A> builder = ImmutableMap.builder();
    builder.put(V1, p1);
    builder.put(V2, p2);
    attrs = builder.build();
  }
}
どちらを優先するかをどのように決定すればよいですか?
ありがとう!