从一个方法创建不同的对象

时间:2015-11-22 21:51:36

标签: java

有没有办法在不使用冗长复杂的if语句的情况下从一个方法生成不同类型的对象?

让我们说我创建了一个名为Vehicle的抽象类。 Vehicle有一个像这样的构造函数:

public abstract class Vehicle {
  int mileage;

  public Vehicle (int mileage) {
    this.mileage = mileage;
  }
}

现在,我已经创建了许多不同类型的车辆,这些车辆都继承了车辆,例如DuneBuggy,SmallCar,MediumCar,BigCar,FastCar,OldCar,NewCar,PickUpTruck,SmallTruck,MediumTruck,LargeTruck,Bicycle,电车,火车等等。根据我的理解,他们现在所有车辆都是继承车辆。

无论用户选择何种类型的车辆,我是否可以通过将其传递给一种方法来获取用户的车辆类型以及里程并创建正确类型的车辆?像这样:

public void createNewVehicle (Variable someKindOfWayToPickVehicleType, int mileage) {
  // Create a new vehicle where exact class is decided by someKindOfWayToPickVehicleType variable
}

1 个答案:

答案 0 :(得分:0)

这解决了我的问题:

public static Car createCar(Class model, int mileage) {
    try {
        Object o = Class.forName(model.getName())
                .getConstructor(int.class)
                .newInstance(mileage);
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return (Car)o;
}

如果有人对这种方法有任何意见或反馈,我总是渴望学习。