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

2022-09-05 00:18:22

以下是我问题的一个抽象示例:我有一个具有类型()的通用类()。所有对象应仅按品牌不同,并且基于此品牌应以不同的方式处理。Carbrand

此类的所有对象都收集在服务类的列表中。服务应对整个列表执行例程,这基本相同。两者之间只有一个函数调用应该不同。

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

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();
            }
        }
    }
}

答案 1

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

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

    public abstract void doSomething();
}

var.getBrand().doSomething();

答案 2

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

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();
}

推荐