在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ enum 和 類繼承Enum相關(guān)問題

enum 和 類繼承Enum相關(guān)問題

問題描述

我用enum來表示一個(gè)枚舉類
另外,再用 XXX extends Enum來表示一個(gè)枚舉類

public final class ApprovalStatusEnum extends Enum {
    private static final long serialVersionUID = -502007467073163619L;

    private String label;

    public static final ApprovalStatusEnum PASS = new ApprovalStatusEnum("PASS", "通過");

    public static final ApprovalStatusEnum REJECT = new ApprovalStatusEnum("REJECT", "退回");

    public static final ApprovalStatusEnum WAIT = new ApprovalStatusEnum("WAIT", "待審核");

    public ApprovalStatusEnum(String name, String label) {
        super(name);
        this.label = label;

    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }
}
public enum ApprovalStatusEnum1 {

    PASS("PASS", "通過"),

    REJECT("REJECT", "退回"),

    WAIT("WAIT", "待審核");

    private String name ;

    private String label;

    ApprovalStatusEnum1(String name, String label) {
        this.name = name;
        this.label = label;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }
}

enum反編譯之后發(fā)現(xiàn)是繼承Enum的,那么這兩個(gè)枚舉類應(yīng)該是一樣的呀。。。

之后我寫了這個(gè)方法(方法接收一個(gè)繼承于Enum的Class):

    public static <T extends Enum> T test(Class<T> clazz){
//      xxxxxxxxxxxxx
        return null;
    }

然后用這兩個(gè)類測試了一下

clipboard.png

發(fā)現(xiàn)有錯(cuò)誤???這是為什么呢?明明兩個(gè)類都繼承了Enum呀。那應(yīng)該都會(huì)編譯通過的呀。求高人指點(diǎn)一下。

有點(diǎn)懵,哪位大佬可以解釋下?

回答
編輯回答
涼薄

你所希望的是他們兩個(gè)都相同嗎?
1、你指定的繼承Enum是java.lang.Enum嗎?那么你一開始指定的Enum是一個(gè)類對(duì)象而不是java.lang.Enum
2、你的測試方法應(yīng)該改一下

public class TestEnum {
    public static <T extends Enum> T test(Class<T> clazz){
//      xxxxxxxxxxxxx
        return null;
    }

    public static <T extends java.lang.Enum> T testLnag(Class<T> clazz){
//      xxxxxxxxxxxxx
        return null;
    }

    public static void main(String[] args) {
        test(ApprovalStatusEnum.class);
        testLnag(ApprovalStatusEnum1.class);
    }
}

3、如果希望一樣的話,應(yīng)該ApprovalStatusEnum也是一個(gè)java.lang.Enum

public enum ApprovalStatusEnum{
    ;
    private static final long serialVersionUID = -502007467073163619L;

    private String label;

    private String name;

    ApprovalStatusEnum(String name, String label) {
        this.name = name;
        this.label = label;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }
}

測試類

public class TestEnum {
    public static <T extends Enum> T test(Class<T> clazz){
//      xxxxxxxxxxxxx
        return null;
    }

    public static <T extends java.lang.Enum> T testLnag(Class<T> clazz){
//      xxxxxxxxxxxxx
        return null;
    }

    public static void main(String[] args) {
        testLnag(ApprovalStatusEnum.class);
        testLnag(ApprovalStatusEnum1.class);
    }
}
2017年9月30日 11:51