根据枚举类型调用特定方法?

时间:2012-10-17 13:41:10

标签: java

以下是我的问题的一个抽象示例:我有一个通用类(Car),它有一个类型(brand)。所有对象只应根据品牌而有所不同,基于此品牌的处理方式应不同。

此类的所有对象都收集在Service类的List中。该服务应该在整个列表上执行例程,其中大多数相同。只需一个函数调用就可以了。

基于这种类型,我想调用不同的方法:目前我正在为枚举类型断言等于并根据结果调用不同的方法。但这有点难看,我想知道是否有更好的解决方案呢?

class Car {
    public enum Brand {
        BMW, AUDI;
    }

    private Brand brand;

    specificMeth1();
    specificMeth2();
}


class Service {

    List<Car> bmw;
    List<Car> Audi;

    processCar() {
        processList(bmw);
        processList(audi);
    }

    processList(List<Car> list) {
        for (Car car : list) {
            if (car.getBrand.equals(Brand.BMW)) {
                specificMeth1();
            } else {
                specificMeth2();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:27)

您应该将该方法放在枚举中:

public enum Brand {
    BMW {
        @Override
        public void doSomething();
    },
    AUDI {
        @Override
        public void doSomething();
    };

    public abstract void doSomething();
}

var.getBrand().doSomething();

答案 1 :(得分:4)

考虑在枚举上定义一个抽象方法,如下所示:

public enum Brand {
    BMW {
        public void specificMethod() {
            System.out.println("meth1");
        }
    },

    AUDI {
        public void specificMethod() {
            System.out.println("meth2");
        }
    };

    public abstract void specificMethod();
}

然后你可以打电话:

for (Car car : list) {
    car.getBrand().specificMethod();
}