循环时切换内部 - 缺少return语句

时间:2015-03-27 17:23:48

标签: java switch-statement

有许多类似的主题,但我找不到我的问题所在......

CustomerDetails - 抽象类

该方法从文件中读取,其中第一个字母确定客户的类型(CustomerDetails的子类)。

public static CustomerDetails readCustomerData(....)

   try
   {
        while(...hasNextLine())  
        {
            ..... 
            .....
            switch(firstLetter)
            {
                case 'A':  ....
                           PrivateCustomerDetails aaa = new PrivateCustomerDetails(...   inherited fields + some extra ones)
                          return aaa;

                case 'B': ...  BusinessCustomerDetails bbb = .....
                          return bbb;

                default:  return null;
             }
        }
        // possibly return something here..
  }
  catch(Exception e)
  {
      ...
      return null;
  }

我注意到如果我输入"则返回null;"在上面的评论字段中,缺少的返回语句消失。但我不明白为什么?我有可能的场景以及默认语句,它涵盖了所有其他情况。

此外,我无法初始化CustomerDetails对象,为其分配新的子类对象并返回,因为它是抽象的。

另外,我不能使子类对象的名称相同,最后还是返回它。

需要澄清一下......非常感谢!

2 个答案:

答案 0 :(得分:5)

如果hasNextLine()在您第一次调用时返回false,该怎么办?在那种情况下会返回什么?您需要return语句来处理这种可能性。

如果您不希望这种情况发生,另一种方法是throw例外。

答案 1 :(得分:1)

因为可能永远不会执行while循环。在这种情况下,您必须返回一个值。