枚举中的逻辑

Viv*_*ath 9 java enums

我和我的同事正在讨论枚举中的逻辑.我个人的偏好是在Java枚举中没有任何逻辑(尽管Java提供了这样做的能力).这个问题的讨论集中在枚举内部有一个方便的方法返回一个地图:

public enum PackageType {
  Letter("01", "Letter"),
  ..
  ..
  Tube("02", "Packaging Tube");

  private String packageCode;
  private String packageDescription;

  ..
  ..

  public static Map<String, String> toMap() {
     Map<String, String> map = new LinkedHashMap<String, String>();
     for(PackageType packageType : PackageType.values()) {
         map.put(packageType.getPackageCode(), packageType.getPackageDescription());
     }
     return map;
  }
}
Run Code Online (Sandbox Code Playgroud)

我个人的偏好是将其推广到服务中.在enum中使用方法的论据集中在便利性上.这个想法是你不必去服务获得它,但可以直接查询枚举.

我的论点集中在关注的分离和将任何类型的逻辑抽象为服务.我不认为"方便"是将这种方法置于枚举中的有力论据.

从最佳实践的角度来看,哪一个更好?或者它只是归结为个人偏好和代码风格?

Zac*_*ght 14

好吧,我以前做过这个,但这并不意味着它是'最好'的事情.

但是,从我的角度来看,我更倾向于在枚举上使用该逻辑,因为您不会将'toString'方法移出到服务中.逻辑只涉及枚举本身及其自身的表示.

我认为将这样的方法转移到服务上会产生误导 - 通过将它放在枚举上,你可以预先知道enum有一个'toMap'方法.一个不了解服务但只是看着枚举的人可能不知道.

它还有助于在IDE中自动完成 - 我可以点击'.' 键并立即查看对象提供的方法.