0

我有五个枚举案例,如下所示:

public enum Answers{
    A(0), B(1), C(2), D(3), E(4);

    Answers(int code){
        this.code = code;
    }

    protected int code;

    public int getCode(){
        return this.code;
    }
}

除了由不同的“代码”和枚举器组成之外,它们几乎都是相同的。我现在有下面这个类,其中泛型是枚举的扩展,但是,我需要能够使用getCode(),它只在我的枚举中,而不是基本枚举。

public class test<T extends Enum>{
    public void tester(T e){
        System.out.println(e.getCode()); //I want to be able to do this, 
                                         //however, the basic enum does don't
                                         //have this method, and enums can't extend
                                         //anything.
    }
}

谢谢

4

4 回答 4

3

你可以让你的枚举实现一个接口:

public interface Coded {
    int getCode();
}

然后:

public enum Answers implements Coded {
    ...
}

和:

public class Test<T extends Enum & Coded> {
    public void tester(T e) {
        System.out.println(e.getCode());
    }
}
于 2013-11-11T18:16:15.863 回答
2

让所有枚举实现一个通用接口:

public interface HasCode {
    int getCode();
}

public enum Answers implements HasCode {
    ...
}

接着

public class Test<T extends HasCode> {
于 2013-11-11T18:16:11.320 回答
2

让你的枚举类实现你自己的HasCode接口:

public interface HasCode {
    public int getCode();
}

public enum Answers implements HasCode {
//...

然后你可以限制THasCode

public class test<T extends HasCode>{

然后Java会认识到任何东西,即使是一个enum,只要它实现HasCode了,都会有一个getCode()方法,它可以被调用tester

于 2013-11-11T18:16:18.820 回答
1

如果这是您要添加到 Enum 的唯一方法,那么您不必这样做。每个 Enum 都有ordinal返回值的方法,该值表示它在 Enum 中的位置。看看这个例子

enum Answers{
    A,B,C,D,E;
}

class EnumTest<T extends Enum<T>>{
    public void tester(T e){
        System.out.println(e.ordinal()); 
    }

    public static void main(String[] args) throws Exception {
        EnumTest<Answers> t = new EnumTest<>();
        t.tester(Answers.A);
        t.tester(Answers.B);
        t.tester(Answers.E);
    }
}

输出:

0
1
4
于 2013-11-11T18:25:54.150 回答