java - 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;
}
解决方案
增加的成员不会丢失;您只需要知道何时尝试将返回Member
的内容转换为Trainer
.
即在调用站点使用,或者使用,例如,并检查结果表达式是否instanceof
为返回值。(Trainer)foo
null
也就是说,这通常是糟糕设计的症状,因为它违背了多态性的目的。
推荐阅读
- android - 安卓通知不来
- python - 我在 discord.py 中制作了一个 Bot,当我运行项目时,它指向 bot.run('My Token') 并说语法无效
- google-cloud-platform - 谷歌云实例停机问题
- java - 通知我的 RecyclerView 数据已更改
- node.js - 如何传递身份验证令牌/标头?
- python - 我的电报机器人中的强制订阅频道出现故障
- jquery - Mathquill - 光标总是比可编辑框领先一步
- python - 返回最大升序数组的索引
- airflow - 在 Apache 气流中实现跨 DAG 依赖
- python - 如何在pygame中跟随鼠标运动时检查玩家的方向是否在x方向上改变