将对象强制转换为枚举JAVA

时间:2015-04-02 08:46:26

标签: java enums

我是JAVA的新手

我只需知道myEnum.values()实现特定的myEnum,就必须遍历interface 假设我有接口statsInterface 我有很少的枚举实现这个接口

enum statsfromMachine1
enum statsfromMachine2
..

后来我想迭代。 我在想什么就像是

public void interfaceEnumImplParser (statsInterface _interface ,object _myinterfaceImplEnum, string Input) {
    for ((_interface)_myinterfaceImplEnum iterable_element : _myinterfaceImplEnum.values()) {
        //do stuff here
    }
}

但我在这里遗漏了一些东西,它甚至都不会编译 有可能吗?

3 个答案:

答案 0 :(得分:1)

看起来您希望在迭代中直接将enum强制转换为接口类型。如果这是真的那么你应该修改你的代码。

public void interfaceEnumImplParser (statsInterface _interface ,object _myinterfaceImplEnum, string Input) {
    for (_interface iterable_element : _myinterfaceImplEnum.values()) {
        //do stuff here
    }
}
希望有所帮助。

答案 1 :(得分:1)

我写了一个小样本,可以帮助您找到多个枚举的通用实现逻辑。

interface Doable<B>{
    B doStuff(Number a);

    String getCategory()
}


enum StatsFromMachine1 implements Doable<String> {
    ABC{

        @Override
        public String doStuff(Number a) {               
            return Integer.toString(a.intValue() + 3);
        }

    };

    @Override
    public String getCategory() {
        return "S1";
    }
}

enum StatsFromMachine2 implements Doable<String>{
    X(1.4), Y(2.86), Z(0.1);

    private Double d;

    @Override
    public String doStuff(Number x) {
        return Double.toString(x.doubleValue() * this.d);
    }

    private StatsFromMachine2(Double d) {
        this.d = d;
    }

    @Override
    public String getCategory() {
        return "S2";
    }
}

当枚举实现相同的接口时,很容易编写适用于所有接口的代码。实际上,这种抽象并不关心,实现是由枚举还是其他东西给出的。

public static String doStuffWithEnums(){
    Collection<Doable<String>> collection = Arrays.asList(StatsFromMachine1.values());
    collection.addAll(Arrays.asList(StatsFromMachine2.values()));

    StringBuilder sb = new StringBuilder();

    for(Doable<String> d : collection){
        sb.append(d.doStuff(5.0));

        if(d.getCategory().equals("S1")){ // alternatively use an instanceOf check
            sb.append(((StatsFromMachine1)d).name());
        }
    }
    return sb.toString();
}

答案 2 :(得分:1)

好的,我已经弄清楚了 感谢您的帮助,我会在审核您的内容后获得+1 所以我基本上enum E1实施了interface I1 迭代enum成员&#34;一般&#34;我做的是:

public static void parse_log_with_enum(I1 ... Is)
{
    for (I1 i1 : Is) {
        // do something with i1
    }   
}