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

Java 从一个方法创建不同的对象,java,Java,是否有任何方法可以从一个方法生成不同类型的对象,而不用使用长而复杂的if语句 假设我创建了一个名为Vehicle的抽象类。车辆具有如下构造: public abstract class Vehicle { int mileage; public Vehicle (int mileage) { this.mileage = mileage; } } public void createNewVehicle (Variable someKindOfWayToPickVehic

是否有任何方法可以从一个方法生成不同类型的对象,而不用使用长而复杂的if语句

假设我创建了一个名为Vehicle的抽象类。车辆具有如下构造:

public abstract class Vehicle {
  int mileage;

  public Vehicle (int mileage) {
    this.mileage = mileage;
  }
}
public void createNewVehicle (Variable someKindOfWayToPickVehicleType, int mileage) {
  // Create a new vehicle where exact class is decided by someKindOfWayToPickVehicleType variable
}
现在,我已经创造了很多不同类型的车辆,这些车辆都继承了车辆,比如四轮车、小型车、中型车、大型车、快速车、旧车、新车、皮卡车、小型卡车、中型卡车、大型卡车、自行车、有轨电车、火车等等。据我所知,他们现在都是车辆,因为他们继承了车辆

是否有任何方法可以从用户处获取车辆类型以及里程数,并通过将其传递给一种方法来创建正确的车辆类型,无论用户选择了哪种类型的车辆?大概是这样的:

public abstract class Vehicle {
  int mileage;

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

这为我解决了问题:

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

如果有人对这种方法有意见或反馈,我总是渴望了解。

如果您有固定数量的车辆,请参阅使用
enum
enum
中的每个元素都可以有自己的“创建”方法,该方法返回正确的车辆类型是一个选项