You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现对象类型转换?将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:47:34