我有n个对象,在执行时基于某些条件我需要其中任何一个。例如。
switch(condition)
{
case 1:
Object1 obj = new Object1();
break;
case 2:
Object2 obj = new Object2();
break;
default:
defaultObject obj = new defaultObject();
break;
}
int getItem = obj.getItemFromObject();
我在我的代码中的许多其他地方使用obj对象。 我知道这个问题可能看起来微不足道甚至是愚蠢但请帮助我。或指导我采用另一种方法。
答案 0 :(得分:2)
首先,是否会编译? (我认为它根本不会编译)
您已在obj
内声明了switch
对象,因此它会抱怨duplicate local variable obj
,因为您在一个块中拥有具有相同变量名称的对象。
当你调用它时,它也无法找到它(因为它超出了它的范围):
int getItem = obj.getItemFromObject();
它会抱怨obj cannot be resolved
除非您之前曾在某处声明并初始化obj
。
当然,你可以根据你想要的条件初始化你的对象,这不是什么大问题。
答案 1 :(得分:1)
在switch的case语句中声明的变量的分数对应于switch block。因此,您不能在不同情况下重新声明相同的变量。但是,您可以根据具体情况为相同的变量分配不同的值。
Object obj = null;
switch(condition)
{
case 1:
obj = new Object1();
break;
case 2:
obj = new Object2();
break;
default:
obj = new defaultObject();
break;
}
int getItem = obj != null ? obj.getItemFromObject() : -1;
答案 2 :(得分:0)
一种方法是使用超类来声明子类变量。例如。如果你想要一个P,Q或R类的对象,那么使用超类A.
P, Q, R will all extend A
。
以下是一些(未经测试的)代码:
A obj = null;
switch(condition)
{
case 1:
obj = new P();
break;
case 2:
obj = new Q();
break;
default:
obj = new R();
break;
}