从令牌确定子对象并初始化它

时间:2011-11-07 03:07:48

标签: java inheritance polymorphism

所以我有一个抽象的父类,有6个子类扩展它。我有一个fileRead(String)方法从文件中读取数据。该文件的第一行有一个类别ID( FOODTYPE _CATID)和一个名称,以“|”分隔(管道)字符,这是我在String Tokenizer中使用的分隔符。我有6个if语句检查令牌并初始化相应的对象。但是,这是我遇到问题的地方,我想稍后在方法中使用该对象,但不能因为

  • A)因为它在if()语句中,编译器认为可能 尚未初始化和
  • B)我无法在if语句之前初始化它,因为它是 抽象。我也只想使用这个单个对象,我不想要 初始化6个不同的对象,并有50个不同的if语句 用一种方法。

所以我的问题是,我如何只针对这类问题使用一个对象?以下是一些供参考的代码:

    Public abstract class Recipe { methods }
    Public class Soup extends Recipe { methods } //There are 5 other classes like this
    Public class Controller 
    {
         doSomething() { logic } 
         doThis() { logic };
         readFile(String str)
         {
               recipeFile.open( "recipes.dat");
               if ( recipeFile.exists() )
               {
                     // read first line from the recipe file
                     recipeLine = recipeFile.readLine();
                     String Tokenizer token; 

                     while ( recipeLine != null)
                     {
                          token = new String Tokenizer(recipeLine, "|");
                          Recipe recipe;

                          if(token.hasMoreTokens())
                          {
                               if(token.equals(SOUP_CATID))
                               {
                                    recipe = new Soup();
                                    recipe.setName(token.toString());
                               }
                               ...more if statements checking other catId's
                          }
                          Ingredients i = new Ingredient();
                          recipeFile.open( "ingredients.dat");
                          while(logic)
                          {
                                //This will not work because recipe
                                //still hasn't been initialized before the if
                                //statements
                                recipe.addIngredient(i);
                          }
                     }
                }
           }
      }

编辑已解决 - 我所要做的就是在if语句之前将recipe初始化为null。           食谱配方= null; 没有产生任何错误,代码/逻辑也有效。

1 个答案:

答案 0 :(得分:0)

不确定为什么在进入原料处理逻辑之前你不认为你的recipe实例不会被初始化,但无论如何我建议你阅读Factory patterns