Java 使用字符串数组创建具有动态子类的对象

Java 使用字符串数组创建具有动态子类的对象,java,Java,我实际上在为我的大学做一个项目 在这种情况下,用户能够生成新对象,而我的问题是,所有需要的对象都来自Aspace的子类 现在的问题是如何使用用户输入的字符串数组创建动态对象 其中一个问题是,将来会有更多的子类,并且会有50多个子类的切换。。。naaaa 例如: class SpaceShipOne extends ASpaceShip class SpaceShipTwo extends ASpaceShip class SpaceShipSpecial extends ASpaceShip c

我实际上在为我的大学做一个项目

在这种情况下,用户能够生成新对象,而我的问题是,所有需要的对象都来自Aspace子类

现在的问题是如何使用用户输入的字符串数组创建动态对象

其中一个问题是,将来会有更多的子类,并且会有50多个子类的切换。。。naaaa

例如:

class SpaceShipOne extends ASpaceShip
class SpaceShipTwo extends ASpaceShip
class SpaceShipSpecial extends ASpaceShip
class SpaceShipN extends ASpaceShip
来自用户的输入,字符串数组

input[0] = "SpaceShipTwo";
input[1] = "SpaceShipSpecial";
input[n] = "AlreadyExistingClassName";
需要:

ArrayList<ASpaceShip> shipList; // Containts all Objects from the User input.
但不幸的是,这不起作用。。。 Inet在这个主题上没有提供太多帮助,也没有提供可以工作但被弃用的东西:(

这里有一些想法吗


protectedvoiddopost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
//所需对象
HttpSession session=request.getSession();
Player=(Player)session.getAttribute(“Player”);
TechTree TechTree=player.getTechTree();//船舶需要他们的TechTree
ArrayList ships=new ArrayList();//保存生成的船舶
ArrayList allresearchedchips=techtree.getAllresearchedchips();//保存生成的船舶
枚举parameterNames=request.getParameterNames();
while(parameterNames.hasMoreElements()){
字符串shipName=parameterNames.nextElement();
String[]paramSValue=request.getParameterValues(shipName);
intpval=Integer.parseInt(paramSValue[0]);
if(hasShip(所有研究船、船名)){
如果(pVal>0){
//ASpaceShip newShip=新类(techtree,1);
}
}
}            
}//结束doPost

如果我很理解你的问题,你只需要有一个switch/case语句或一个
If
等,检查用户输入字符串并使用适当的子类构造适当的对象。然后所有构造的对象都可以添加到
ArrayList
,例如保存扩展
ASpaceShip>的所有对象

ASpaceShip a = null;
ArrayList<ASpaceShip> myList = new ArrayList<>();
for (String s : inputArray) {
     if ("SpaceShipOne".equals(s))  a = new SpaceShipOne();
     if ("SpaceShipTwo".equals(s))  a = new SpaceShipTwo();
     ...
     myList.add(a);
}
ASpaceShip a=null;
ArrayList myList=新的ArrayList();
for(字符串s:inputArray){
如果(“太空船一号”。等于(s))a=新的太空船一号();
如果(“太空船二号”。等于(s))a=新的太空船二号();
...
添加(a);
}
更新:

使用反射:

ASpaceShip a = null;
ArrayList<ASpaceShip> myList = new ArrayList<>();
String[] array = {"SpaceShipTwo","SpaceShipSpecial"};
for (String className : array) {
    Class aClass = Class.forName("yourPackagePath" + className); // need to pass full class name here
    a = (ASpaceShip)aClass.newInstance();
    myList.add(a);
}
for (ASpaceShip as : myList) System.out.println(as.getClass().getSimpleName());
ASpaceShip a=null;
ArrayList myList=新的ArrayList();
字符串[]数组={“SpaceShipTwo”,“SpaceShipSpecial”};
for(字符串类名称:数组){
Class aClass=Class.forName(“yourPackagePath”+className);//需要在这里传递完整的类名
a=(ASpaceShip)aClass.newInstance();
添加(a);
}
for(ASpaceShip as:myList)System.out.println(as.getClass().getSimpleName());

如果我很理解你的问题,你只需要有一个switch/case语句或一个
If
等,检查用户输入字符串并使用适当的子类构造适当的对象。然后所有构造的对象都可以添加到
ArrayList
,例如保存扩展
ASpaceShip>的所有对象

ASpaceShip a = null;
ArrayList<ASpaceShip> myList = new ArrayList<>();
for (String s : inputArray) {
     if ("SpaceShipOne".equals(s))  a = new SpaceShipOne();
     if ("SpaceShipTwo".equals(s))  a = new SpaceShipTwo();
     ...
     myList.add(a);
}
ASpaceShip a=null;
ArrayList myList=新的ArrayList();
for(字符串s:inputArray){
如果(“太空船一号”。等于(s))a=新的太空船一号();
如果(“太空船二号”。等于(s))a=新的太空船二号();
...
添加(a);
}
更新:

使用反射:

ASpaceShip a = null;
ArrayList<ASpaceShip> myList = new ArrayList<>();
String[] array = {"SpaceShipTwo","SpaceShipSpecial"};
for (String className : array) {
    Class aClass = Class.forName("yourPackagePath" + className); // need to pass full class name here
    a = (ASpaceShip)aClass.newInstance();
    myList.add(a);
}
for (ASpaceShip as : myList) System.out.println(as.getClass().getSimpleName());
ASpaceShip a=null;
ArrayList myList=新的ArrayList();
字符串[]数组={“SpaceShipTwo”,“SpaceShipSpecial”};
for(字符串类名称:数组){
Class aClass=Class.forName(“yourPackagePath”+className);//需要在这里传递完整的类名
a=(ASpaceShip)aClass.newInstance();
添加(a);
}
for(ASpaceShip as:myList)System.out.println(as.getClass().getSimpleName());

发布你的代码。@MuratKaragöz跟随GitHub链接,应该有足够的工作代码:DPost你的代码。@MuratKaragöz跟随GitHub链接,应该有足够的工作代码:Dif你有3个类,是的,这可以工作,但是有40多个类…需要它动态:(感谢你的工作…java对我发出嘘声,因为你有新实例()已弃用:(我们快到了!我现在遇到一个错误:java.lang.reflect.InvocationTargetException实际代码可以在这里看到:如果您有3个类,是的,但有40多个类可以工作…需要动态:(感谢您的工作…java对我发出嘘声,因为newInstance()已弃用:(我们快到了!我现在收到一个错误:java.lang.reflect.InvocationTargetException实际代码可以在这里看到: