Java 如何根据用户输入创建新对象?
我不确定这是什么合适的术语,但是,我正在尝试找出如何基于用户输入创建对象的新实例 假设我有5个不同的对象类,我只需要全部或部分类中的5个对象,我可能有一个以上的类,而没有其他类。我可以写些什么来创建所有或部分这些对象的新实例 此外,我需要在没有用户输入的情况下将新对象字段设置为特定参数,并且需要同时创建Java 如何根据用户输入创建新对象?,java,object,arraylist,Java,Object,Arraylist,我不确定这是什么合适的术语,但是,我正在尝试找出如何基于用户输入创建对象的新实例 假设我有5个不同的对象类,我只需要全部或部分类中的5个对象,我可能有一个以上的类,而没有其他类。我可以写些什么来创建所有或部分这些对象的新实例 此外,我需要在没有用户输入的情况下将新对象字段设置为特定参数,并且需要同时创建ArrayList 下面是一个示例,其中1个对象和arraylist I可能需要根据用户输入生成,具体字段如下: ArrayList<Item> rangerInv0 = new Ar
ArrayList
下面是一个示例,其中1个对象和arraylist I可能需要根据用户输入生成,具体字段如下:
ArrayList<Item> rangerInv0 = new ArrayList<Item>();
Ranger rangerObj0 = new Ranger("Ranger", 100, 4, 10, rangerInv0);
ArrayList rangerInv0=新的ArrayList();
Ranger RangerRobJ0=新的Ranger(“Ranger”,100,4,10,rangerInv0);
我有办法做到这一点吗?这叫什么
另外,我希望避免这种情况
if (resp == 1){
if (rangerCount == 0){
ArrayList<Item> rangerInv0 = new ArrayList<Item>();
Ranger rangerObj0 = new Ranger("Ranger", 100, 4, 10, rangerInv0);
rangerObj0.pickUp(mh1000);
rangerObj0.pickUp(s1000);
rangerObj0.pickUp(t1000);
rangerObj0.equip(mh1000);
rangerObj0.equip(s1000);
rangerObj0.equip(t1000);
playerUnits.add(rangerObj0);
playerUnitsCount++;
rangerCount++;
}
else if (rangerCount == 1){
ArrayList<Item> rangerInv1 = new ArrayList<Item>();
Ranger rangerObj1 = new Ranger("Ranger", 100, 4, 10, rangerInv1);
rangerObj1.pickUp(mh1000);
rangerObj1.pickUp(s1000);
rangerObj1.pickUp(t1000);
rangerObj1.equip(mh1000);
rangerObj1.equip(s1000);
rangerObj1.equip(t1000);
playerUnits.add(rangerObj1);
playerUnitsCount++;
rangerCount++;
}
else if (rangerCount == 2){
ArrayList<Item> rangerInv2 = new ArrayList<Item>();
Ranger rangerObj2 = new Ranger("Ranger", 100, 4, 10, rangerInv2);
rangerObj2.pickUp(mh1000);
rangerObj2.pickUp(s1000);
rangerObj2.pickUp(t1000);
rangerObj2.equip(mh1000);
rangerObj2.equip(s1000);
rangerObj2.equip(t1000);
playerUnits.add(rangerObj2);
playerUnitsCount++;
rangerCount++;
}
}
if(resp==1){
如果(rangerCount==0){
ArrayList rangerInv0=新的ArrayList();
Ranger RangerRobJ0=新的Ranger(“Ranger”,100,4,10,rangerInv0);
rangerObj0.皮卡(mh1000);
rangerObj0.皮卡(s1000);
rangerObj0.皮卡(t1000);
rangerObj0.装备(mh1000);
rangerObj0.装备(s1000);
rangerObj0.装备(t1000);
playerUnits.add(rangerObj0);
PlayerUnitScont++;
rangerCount++;
}
else if(rangerCount==1){
ArrayList rangerInv1=新的ArrayList();
Ranger rangerObj1=新的Ranger(“Ranger”,100,4,10,rangerInv1);
范围J1.捡拾器(mh1000);
范围J1.捡拾器(s1000);
范围J1.捡拾器(t1000);
rangerObj1.设备(mh1000);
装备(s1000);
测距仪J1.配备(t1000);
playerUnits.add(rangerObj1);
PlayerUnitScont++;
rangerCount++;
}
否则如果(rangerCount==2){
ArrayList rangerInv2=新的ArrayList();
Ranger rangerObj2=新的Ranger(“Ranger”,100,4,10,rangerInv2);
范围J2.捡拾器(mh1000);
范围J2.捡拾器(s1000);
范围J2.捡拾器(t1000);
rangerObj2.装备(mh1000);
装备(s1000);
测距仪J2.装备(t1000);
playerUnits.add(rangerObj2);
PlayerUnitScont++;
rangerCount++;
}
}
有没有一种方法可以通过变量或某种计数器更新我的对象和ArrayList名称
如果我能做这样的事情,那就太酷了,但到目前为止,我还没有找到一种方法来实现这一点:
int rangerCount = 0;
String rangerInvNum = ("rangerInv" + rangerCount);
String rangerObjNum = ("rangerObj" + rangerCount);
ArrayList<Item> rangerInvNum = new ArrayList<Item>();
Ranger rangerObjNum = new Ranger("Ranger", 100, 4, 10, rangerInvNum);
int rangerCount=0;
字符串rangerInvNum=(“rangerInv”+rangerCount);
字符串rangerObjNum=(“rangerObj”+rangerCount);
ArrayList rangerInvNum=新的ArrayList();
Ranger RangerRobjnum=新的Ranger(“Ranger”,100,4,10,rangerInvNum);
您需要的是为这种逻辑使用适当的设计模式,您可以在这里选择的似乎是,或者(在这种情况下,最后一种是工厂)
像这样最简单的解决方案如下
public interface Item {}
public class Ranger implements Item {
// ...
}
// ...
public class CommonCreationProperties {
// All the fields user can popularne
}
public class ItemFactory{
public Item createItem(CommonProperties properties)
if(isRanger(properties)) {
return new Ranger(properties.getType(), ...); // Event better introduce builder here
} else if(is...) {
return ...
}
}
private boolean isRanger(CommonProperties properties) {
return "Ranger".equals(properties.getType());
}
// ...
}
当然,提供一些特殊的
类型
字段来识别用户提供的项目
的类型是选项之一-您可以实现另一种机制-唯一的一点是,使用这种方法,您的项目应该有一些公共接口,如项目
,许多实现取决于项目的类型您需要的物品您可以尝试开关盒:
String className = "user input here"
switch(className) {
case "Ranger": {
Ranger myRanger = new Ranger();
ArrayList<Item> rangerInv0 = new ArrayList<Item>();
break;
}
case "otherClass": {
OtherClass myObj = new OtherClass();
ArrayList<Item> otherClassInv0 = new ArrayList<Item>();
break;
}
case "....": {
// ....
break;
}
default: {
// print error message, end program, ...
}
}
String className=“此处用户输入”
开关(类名){
“游侠”案:{
Ranger myRanger=新的Ranger();
ArrayList rangerInv0=新的ArrayList();
打破
}
“其他类别”案例:{
OtherClass myObj=新的OtherClass();
ArrayList otherClassInv0=新的ArrayList();
打破
}
案例“…”:{
// ....
打破
}
默认值:{
//打印错误消息,结束程序。。。
}
}
- 这对你有帮助
- 您不需要创建对象类型和逐个变量,您可以 使用一些我已经实现的泛型
公共级护林员{
私有字符串objectName;
私有型val1;
私有型val2;
私有类型val3;//在这里可以设置任何类型的ex、int、string
private E[]rangerInv0;//您可以设置任何类型的数组
公共Ranger(字符串objectName,类型val1,类型val2,类型val3,E[]rangerInv0){
超级();
this.objectName=objectName;
这是1.val1=val1;
this.val2=val2;
this.val3=val3;
此参数为0.rangerInv0=rangerInv0;
}
看起来您需要查看构造函数是的。首先,您必须学习如何同时使用字段和构造函数。注意:从设计角度来看,您不应该将项目列表传递给Ranger。因为这允许其他代码更改Ranger中的数据。任何知道list对象的代码都可以修改考虑到给游戏者一个方法“AdditMeMe”和“ReaveItMe()”…但是不要把这个内部数据结构暴露给世界!我把对象传递给我的AARAYLIST,我可以用列表来做吗?我明白你的意思,请看我编辑的代码和我的if语句,看看这是否可以简化。
public class Ranger<E> {
private String objectName;
private Type val1;
private Type val2;
private Type val3; // here you can set any kind of typs ex, int,string
private E[] rangerInv0; // you can set any kind of array
public Ranger(String objectName, Type val1, Type val2, Type val3, E[] rangerInv0) {
super();
this.objectName = objectName;
this.val1 = val1;
this.val2 = val2;
this.val3 = val3;
this.rangerInv0 = rangerInv0;
}