列挙クラスのコードを通じて値を取得するための Java のメソッドが改善されました

この記事はあくまで独学に限定したものであり、学ぶ価値のあるものは何もありませ

仕事では、管理者、プロジェクト マネージャー、開発者、一般ユーザーなど、特定の定数値に遭遇することがよくあります。多くのオプションを持つこのような定数の場合、通常、対応する数値が見つかります。たとえば、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 つのメソッドが列挙型クラスに存在する必要があることです。投げられた異常。

リフレクションを使用するとパフォーマンスに多少の影響が出る可能性がありますが、コードの再利用性が向上するため、全体的には利点が欠点を上回っていると思います。

おすすめ

転載: blog.csdn.net/qq_43649799/article/details/131020302