我可以根据java中的某些条件使用不同的对象初始化相同的变量名吗?

时间:2014-01-26 05:05:44

标签: java android object

我有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对象。 我知道这个问题可能看起来微不足道甚至是愚蠢但请帮助我。或指导我采用另一种方法。

3 个答案:

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