有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓我可以根据java中的特定条件用不同的对象初始化相同的变量名吗?

我有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) 个答案

  1. # 1 楼答案

    一种方法是使用一个超类来声明一个子类变量。如果你想要一个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;
    }
    
  2. # 2 楼答案

    switch的case语句中声明的变量的分数对应于switch块。因此,不能在不同的情况下重新声明相同的变量。但是,您可以根据具体情况为同一变量指定不同的值

    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;
    
  3. # 3 楼答案

    首先,这是编译吗?(我认为它根本不会编译)

    您已经在switch内声明了obj对象,因此它会抱怨duplicate local variable obj,因为您在单个块内有具有相同变量名的对象

    此外,当您调用此选项时,它将无法找到它(因为它不在其范围内):

    int getItem = obj.getItemFromObject();它会抱怨obj cannot be resolved

    除非你之前在某处声明并初始化了obj

    当然,你可以根据你想要的条件初始化你的对象,这没什么大不了的