如何实现对象类型转换?将Paciente类型对象转为Enfermo类型并存入对应数组的技术问询
解决Paciente转Enfermo的类型转换问题
首先得说,你代码里的核心问题有两个:一是直接把字符串(getNombre()的返回值)赋值给Enfermo类型的数组元素,这肯定类型不匹配;二是没搞对Paciente到Enfermo的对象转换逻辑。我分两种常见场景给你说怎么改:
场景1:Enfermo是Paciente的子类
如果你的类结构是Enfermo extends Paciente(也就是Enfermo继承自Paciente),那可以直接做强制类型转换,但记得先做类型检查避免报错:
public void atender(Pacientes[] salaDeEspera, Enfermo[] habitaciones, Enfermeros enfermero1, Doctores doctor1) { for (int i = 0; i < salaDeEspera.length; i++) { enfermero1.examinar(salaDeEspera[i].getNombre()); doctor1.atender(salaDeEspera[i].getNombre()); // 简化条件判断,不用写==true if (doctor1.enfermo) { // 先确认当前Paciente实例可以转成Enfermo if (salaDeEspera[i] instanceof Enfermo) { habitaciones[i] = (Enfermo) salaDeEspera[i]; } else { // 如果这个Paciente本来不是Enfermo,就用它的属性新建一个Enfermo对象 habitaciones[i] = new Enfermo(salaDeEspera[i].getNombre()); // 要是还有其他属性(比如年龄、症状),记得一起传进去 } } } }
场景2:Paciente和Enfermo是独立的类
如果这两个类没有继承关系,那你得从Paciente对象里提取需要的属性,用这些属性创建一个新的Enfermo实例。假设Enfermo有一个接收名字的构造函数:
public class Enfermo { private String nombre; // 其他属性比如症状、编号等 public Enfermo(String nombre) { this.nombre = nombre; } // 对应的getter/setter }
那你的代码要改成这样:
public void atender(Pacientes[] salaDeEspera, Enfermo[] habitaciones, Enfermeros enfermero1, Doctores doctor1) { for (int i = 0; i < salaDeEspera.length; i++) { enfermero1.examinar(salaDeEspera[i].getNombre()); doctor1.atender(salaDeEspera[i].getNombre()); if (doctor1.enfermo) { Paciente currentPaciente = salaDeEspera[i]; // 用Paciente的属性新建Enfermo对象 habitaciones[i] = new Enfermo(currentPaciente.getNombre()); // 要是还有其他属性需要复制,比如currentPaciente.getEdad(),一起加到构造函数里 } } }
另外还要提醒你两个小细节:
- 注意数组下标越界问题:如果
habitaciones的长度比salaDeEspera短,直接用i当下标会报错,最好先判断i < habitaciones.length再赋值。 - 编码规范里,布尔类型的条件判断不用写
==true,直接写变量名更简洁。
内容的提问来源于stack exchange,提问作者Borjaren
相关产品推荐
相关产品推荐

