Java 从一个方法创建不同的对象
是否有任何方法可以从一个方法生成不同类型的对象,而不用使用长而复杂的if语句 假设我创建了一个名为Vehicle的抽象类。车辆具有如下构造:Java 从一个方法创建不同的对象,java,Java,是否有任何方法可以从一个方法生成不同类型的对象,而不用使用长而复杂的if语句 假设我创建了一个名为Vehicle的抽象类。车辆具有如下构造: public abstract class Vehicle { int mileage; public Vehicle (int mileage) { this.mileage = mileage; } } public void createNewVehicle (Variable someKindOfWayToPickVehic
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
中的每个元素都可以有自己的“创建”方法,该方法返回正确的车辆类型是一个选项