12

这是我的问题的一个抽象示例:我有一个Car具有类型 ( ) 的通用类 ( brand)。所有的对象都应该只因品牌而异,并根据这个品牌进行不同的处理。

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

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

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

2 回答 2

33

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

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

    public abstract void doSomething();
}

var.getBrand().doSomething();
于 2012-10-17T13:43:03.300 回答
6

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

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();
}
于 2012-10-17T13:46:41.240 回答