2015-11-22 20 views
0

有没有什么方法可以从一种方法生成不同类型的对象,而不需要使用冗长而复杂的if语句?从一种方法创建不同的对象

可以说我创建了一个叫做Vehicle的抽象类。车辆具有这样的构造:

public abstract class Vehicle { 
    int mileage; 

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

现在,我已经创建了很多很多不同类型的车辆,所有车辆的继承,如沙滩车,SmallCar,MediumCar,BigCar,FastCar,OldCar,NewCar,皮卡,SmallTruck,MediumTruck,LargeTruck,Bicycle,Tram,Train等等。据我了解,他们现在都是车辆,因为他们继承了车辆。

有没有什么办法可以从用户那里获得车辆类型和里程数,并且无论用户选择何种车辆类型,都可以通过将其传递给一种方法来创建正确类型的车辆?事情是这样的:

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

请参阅http://stackoverflow.com/questions/9174359/create-different-objects-depending-on-type – jarmod

+0

如果您拥有固定数量的车辆,请使用'enum'。 'enum'中的每个元素都可以拥有自己的“创建”方法,它返回正确的车辆类型 – MadProgrammer

+0

http://stackoverflow.com/a/29853592/180100是一个选项 –

回答

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

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

相关问题