【发布时间】:2021-02-04 16:52:23
【问题描述】:
我有以下代码,我需要对其进行重构以降低复杂性并增加模块化和封装性。我还需要降低 ck 指标值。
private void initialiseVehicle(String vehicleName) {
if(vehicleName.equals("Boat")) {
vehicle = new Boat("Apollo ");
}
else if(vehicleName.equals("Ship")) {
vehicle = new Ship("Cruizz");
}
else if(vehicleName.equals("Truck")) {
vehicle = new Truck("Ford F-650");
}
else if(vehicleName.equals("Motorcycle")) {
vehicle = new Motorcycle("Suzuki");
}
else if(vehicleName.equals("Bus")) {
vehicle = new Bus("Aero");
}
else if(vehicleName.equals("Car")) {
vehicle = new Car("BMW");
}
else if(vehicleName.equals("Bicycle")) {
vehicle = new Bicycle("A-bike");
}
else if(vehicleName.equals("Helicopter")) {
vehicle = new Helicopter("Eurocopter");
}
else if(vehicleName.equals("Airplane")) {
vehicle = new Airplane("BA");
}
else if(vehicleName.equals("Tram")) {
vehicle = new Tram("EdinburghTram");
}
else if(vehicleName.equals("Train")) {
vehicle = new Train("Virgin",4);
}
}
你如何重构这段代码? switch-cases 是否降低了复杂性?
【问题讨论】:
-
switch不会这样做,但您可以创建一个Map<String, Vehicle>并更改您的代码以使用map.get(vehicleName)。 -
你能从代码中取一行举个例子吗?
-
您能否详细说明我如何使用 Map
map = new HashMap ();通过展示一个例子来解决这个问题?谢谢@VLAZ -
@VLAZ 当然地图是首选方式,但为什么开关不起作用?
-
@VLAZ 这也让我感到惊讶!一个开关会使指标值上升很多点。
标签: java refactoring cyclomatic-complexity