Итак, у меня есть абстрактный родительский класс с 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.
Рецепт Рецепт = ноль;
Не выдало никаких ошибок и код / логика работает.