我有一个非常恼人的任务,需要我创建一个对象的3个实例,我需要创建方法来修改和访问它们以便在另一个类中使用。 我知道最简单和最好的方法是使用一个数组,但是我不应该知道那些,并且赋值要求我不要使用它们。
所以基本上我正在寻找一种基于另一个变量与每个对象进行交互的方法。
例如,我有以下对象实例:
object1 对象2 object3
我想要做的是创建一个变量objectNo,并使用该变量的数量来选择对象1,2或3
而不是拥有一堆if语句并且编写相同的代码3次,其中唯一的区别是对象名称,正如我现在所拥有的那样:
public void updateObject (int argNo, String argName)
{
private int objectNo = argNo;
private String productName = argName;
if (objectNo == 1)
{
object1.name = productName
}
else if (objectNo == 2)
{
object2.name = productName
...
}
任何建议,我都是Java的新手,而这正是我的目标。
答案 0 :(得分:0)
有几件事:
if (objectNo = 1)
将值1赋给objectNo
,然后尝试将objectNo
计算为布尔值,这将在编译时抛出错误,因为objectNo
是int而不是布尔值。应该是
if (objectNo == 1)
Switch声明可以减少if-else
的详细程度switch (objectNo) {
case 1: object1.setName(productName);
break;
case 2: object2.setName(productName);
break;
case 3: object3.setName(productName);
break;
default: throw new IllegalArgumentException("Cannot handle " + objectNo);
}
但正如您所指出的更优雅的解决方案是使用数组。
new X[] {object1, object2, object3, ...}[objectNo].setName(productName);
第三,如上所示,你应该为name创建一个setter,你不应该将对象中的字段暴露给其他类,你应该将它们标记为私有。
答案 1 :(得分:0)
而不是拥有一堆if语句并且编写相同的代码3次,其中唯一的区别是对象名称,正如我现在所拥有的那样:
如果你想从副本中拯救自己粘贴代码,在这种情况下可以使用变量,例如:
MyObject objectToChange;
if (objectNo == 1) {
objectToChange = object1;
} else if (objectNo == 2) {
objectToChange = object2;
} else if (objectNo == 3) {
objectToChange = object3;
} else {
throw new IllegalArgumentException(Integer.toString(objectNo));
}
objectToChange.name = productName;
这实际上是否对您有所帮助取决于您使用objectToChange
进行了多少工作。
您也可以使用switch
代替if...else
,但除了使代码整齐排列外,它并没有真正为您节省任何费用。
当然,数组或Map
是在现实世界中做这样的事情的正确方法。
答案 2 :(得分:0)
...如果你制作了第一次实例化的对象数组,你可以通过更改[]内容来选择要调用的对象。
答案 3 :(得分:-1)
public class MyClass {
public static void main(String args[])
{
createObject(1, "String");
createObject(2, "StringBuffer");
createObject(3, "StringBuilder");
}
public static void createObject(int argNo, String argName)
{
Object user=null;
if(argNo==1)
{
user=new String();
}
else if(argNo==2)
{
user=new StringBuffer();
}else if(argNo==3)
{
user=new StringBuilder();
}
System.out.println("Object of type "+user.getClass()+" created");
}
}