この記事はあくまで独学に限定したものであり、学ぶ価値のあるものは何もありません。
仕事では、管理者、プロジェクト マネージャー、開発者、一般ユーザーなど、特定の定数値に遭遇することがよくあります。多くのオプションを持つこのような定数の場合、通常、対応する数値が見つかります。たとえば、0、1、2
、 3、4。
この 1 対 1 の対応には、通常、列挙型クラスを使用して実装します。
今日まで、私の列挙クラスは次のように書かれていました
public enum UserEnum {
GENERAL_USER(1, "普通用户"),
BAN(2,"被封号"),
ADMIN(3,"管理员");
private Integer code;
private String value;
UserEnum(Integer code, String value) {
this.code = code;
this.value = value;
}
public static String getValue(Integer code) {
if (code == null) {
return "";
}
for (UserEnum user : UserEnum.values()) {
if (user.code.intValue() == code.intValue()) {
return user.value;
}
}
return "";
}
}
しかし、列挙型クラスが増えると、列挙型クラスごとに getValue メソッドを記述する必要があり、非常に面倒であることがわかったので、この要件を達成するパブリック メソッドを記述できないか考えました。
public static String getEnumValueByCode(Class<? extends Enum<?>> clazz, Integer code) {
for (Enum<?> enumConstant : clazz.getEnumConstants()) {
try {
if (Integer.parseInt(String.valueOf(clazz.getMethod("getCode").invoke(enumConstant))) == code.intValue()) {
return String.valueOf(clazz.getMethod("getValue").invoke(enumConstant));
}
} catch (Exception e) {
e.printStackTrace();
}
}
return "";
}
このメソッドは主にリフレクションに基づいて実装されます。列挙型クラスの2 つのメソッドgetCodeおよびgetValueは、リフレクションを通じて取得されます。もちろん、このメソッドを使用するための前提条件は、これら 2 つのメソッドが列挙型クラスに存在する必要があることです。投げられた異常。
リフレクションを使用するとパフォーマンスに多少の影響が出る可能性がありますが、コードの再利用性が向上するため、全体的には利点が欠点を上回っていると思います。