首页 > 解决方案 > Java - 返回多种返回类型

问题描述

我目前正在编写一个读取 CSV 文件的程序,然后根据每行 (M/T) 中的第一个字符创建成员或培训师类型的对象。我希望函数 parseLine 返回新的对象。trainer 类继承自 Member 并且代码“有效”,但是 Trainer 类的附加变量在将其作为“Member”返回时会丢失。是否有可能在该函数中返回一个训练器对象或调用另一个有帮助的函数?谢谢。

 public static Member parseLine(final String line) {
    try {
        String[] lines = line.split(";");
        String[] sports = lines[2].split(",");

       Map<Sports,Level> temp = new LinkedHashMap<Sports,Level>();

       for(int count = 0; count < sports.length/2; ++count) {
           temp.put(Sports.valueOf(sports[count].toUpperCase()), Level.valueOf(sports[count+1].toUpperCase()));
           ++count;
       }

       if(lines[0]=="T")
           return new Trainer(lines[1],temp);
       else
           return new Member(lines[1],temp);
       
      } catch (Exception e) {
          System.err.println("Exception occured: " + e);
      }
      return null;
    
}

标签: javaclassinheritancereturn

解决方案


增加的成员不会丢失;您只需要知道何时尝试将返回Member的内容转换为Trainer.

即在调用站点使用,或者使用,例如,并检查结果表达式是否instanceof为返回值。(Trainer)foonull

也就是说,这通常是糟糕设计的症状,因为它违背了多态性的目的。


推荐阅读