Определение дочернего объекта из токена и его инициализация - PullRequest
0 голосов
/ 07 ноября 2011

Итак, у меня есть абстрактный родительский класс с 6 дочерними классами, расширяющими его. У меня есть метод fileRead (String), который читает данные из файла. Первая строка файла имеет идентификатор категории ( 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. Рецепт Рецепт = ноль; Не выдало никаких ошибок и код / ​​логика работает.

1 Ответ

0 голосов
/ 07 ноября 2011

Не знаю, почему вы не думаете, что ваш экземпляр recipe не будет инициализирован до того, как вы перейдете к логике обработки ингредиентов, но в любом случае я бы порекомендовал прочитать Заводские шаблоны .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...