将字符串转换为对象名称Java

时间:2017-03-27 23:59:09

标签: java string object type-conversion

这可能是一个简单的问题,甚至没有任何接口(数组,地图等)也是不可能的,但我想知道是否有可能将对象名称转换为String,因此我可以作为参数传递。我有两个类Paciente和Sintomas有多个对象,我需要作为参数传递给一个函数,但我不想使用数组(它必须是这样的),我无法想象任何其他方式这样做没有手动为每个插入一个插入。

Paciente Paciente1 = new Paciente("001", "Ana Melo", 33, "");
Paciente Paciente2 = new Paciente("002", "Rui Costa", 13, "");
Paciente Paciente3 = new Paciente("003", "Joana Martins", 85, "");
Paciente Paciente4 = new Paciente("004", "Pedro Torres", 53, "");
Paciente Paciente5 = new Paciente("005", "Ana Gomes", 93, "");
Paciente Paciente6 = new Paciente("006", "Jorge Costa", 56, "");

Sintomas Sintoma1 = new Sintomas("001", "febre");
Sintomas Sintoma2 = new Sintomas("001", "dores");
Sintomas Sintoma3 = new Sintomas("001", "machas");
Sintomas Sintoma4 = new Sintomas("002", "febre");
Sintomas Sintoma5 = new Sintomas("002", "manchas");
Sintomas Sintoma6 = new Sintomas("003", "febre");
Sintomas Sintoma7 = new Sintomas("003", "dores");
Sintomas Sintoma8 = new Sintomas("004", "febre");
Sintomas Sintoma9 = new Sintomas("006", "manchas");
Sintomas Sintoma10 = new Sintomas("006", "dores");

// now I would like to pass to a function as argument something like this:

for(int i = 0 ; i < 6 ; i++)
    kSession.insert("Paciente"+(i+1));

// instead of making 

kSession.insert(Paciente1);
kSession.insert(Paciente2);
kSession.insert(Paciente3);

// and so on. 

1 个答案:

答案 0 :(得分:1)

这样的东西应该可以工作(假设你的意思是因为大小限制没有数组),请注意,你必须在某个地方添加数据,它也可以从txt或其他东西加载它,但它必须在某个时候定义

List<Paciente> pacientes = new ArrayList<>(); // no size constraints, automatically expands if too small

pacientes.add(new Paciente("", "", ""));

for (Paciente paciente : pacientes) { // loop all Patientes in pacientes
    kSession.insert(paciente); // add a paciente to the session, for every entry
}

ofcource可以为任何类或对象

完成

这一切都归结为,您希望如何存储和访问数据,以及您需要存储和访问数据的位置。使用ArrayList和Map提供了轻松更改数据列表大小和内容的实用程序,但是必须首先插入任何数据

作为旁注,如果患者有ID,那么使用Map

Map<String, Paciente> pacientes = new HashMap<>();

提供了一种非常快速地访问patiens的方法,如果需要,TreeMap结构按键排序。

其他选择可能是 管理数据的包装类将与ArrayList&lt;&gt;类似地工作。但您可以从列表中定义添加,删除等规则。

public class Wrapper{
    private List<Paciente> pacientes = new ArrayList<>();

    public void addPaciente(Paciente paciente){
        if(!this.pacientes.contains(paciente)) // prevent multi entries
            paciente.add(paciente);
    }

    public void addPacientes(List<Paciente> pacientes){
        for(Paciente paciente : pacientes) // add all patients using the add method
            this.addPaciente(paciente);
    }

    public List<Paciente> getPacientes(){
        return this.pacientes;
    }
}

然后您可以将患者添加到kSession,如前所述

最后,没有理由为什么Paciente可以拥有Sintomas的列表,这样

public class Paciente{
    private List<Sintomas> sintomas = new ArrayList<>();

    public addSintomas(Sintomas sintomas){
        if(!this.sintomas.contains(sintomas))
            this.sintomas.add(sintomas);
    }
    // rest is the same principle as above in "Wrapper"
}

通过这种方式,您可以获得一个Paciente,并添加一个Sintomas,然后当您想要查看Pacientes Sintomas时,您可以从该Paciente获取Sintomas列表