Java 从令牌确定子对象并初始化它
所以我有一个抽象的父类,有6个子类扩展它。我有一个fileRead(String)方法,可以从文件中读取数据。文件的第一行有一个类别ID(FOODTYPE_CATID)和一个名称,由“|”(管道)字符分隔,这是我在字符串标记器中使用的分隔符。我有6条if语句检查令牌并初始化适当的对象。然而,这就是我遇到问题的地方,我想在以后的方法中使用该对象,但不能,因为Java 从令牌确定子对象并初始化它,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,所以我有一个抽象的父类,有6个子类扩展它。我有一个fileRead(String)方法,可以从文件中读取数据。文件的第一行有一个类别ID(FOODTYPE_CATID)和一个名称,由“|”(管道)字符分隔,这是我在字符串标记器中使用的分隔符。我有6条if语句检查令牌并初始化适当的对象。然而,这就是我遇到问题的地方,我想在以后的方法中使用该对象,但不能,因为 A) 因为它在if()语句中,编译器认为 尚未初始化,并且 B) 我不能在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。
配方=空;
没有产生任何错误,代码/逻辑正常。不确定您为什么不认为在进入配料处理逻辑之前,
配方
实例不会被初始化,但无论如何,我建议您继续阅读。我实际上刚刚找到了答案。并不是我不知道配方会被初始化,编译器一直抱怨配方可能没有被初始化。无论如何,我所要做的就是在if语句之前将recipe初始化为null。没有产生任何错误。也谢谢你的意见