将类的属性存储在ArrayList而不是使用字段是否明智?

时间:2015-08-24 14:26:40

标签: java arrays list class properties

我可以将ArrayList中不同文本字段的文本存储起来,并将其存储到Customer类中的Booking属性中。现在它正在读取每个文本字段并将它们保存到不同的属性中。

private String flighttime;
private String flightlocation;
private String flightfee;
private boolean car;
private boolean insurance;
private Customer customer;

private void savebookingButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                  
        Booking customerbooking = new Booking();
        Customer cust = null;

        try {
            if (custnameTF.getText().equals("")) {
                throw new EmptyField("Please Insert Customer");
            } else {
                FileOutputStream fos = new FileOutputStream("Bookings/" + custidTF.getText() + ".txt");
                ObjectOutputStream oos = new ObjectOutputStream(fos);

                cust.setPersonName((custnameTF.getText()));
                cust.setPersonSurname((custsurnameTF.getText()));
                cust.setPersonID((custidTF.getText()));
                cust.setConsultantname(consnameTF.getText());
                cust.setConsultantsurname((conssurnameTF.getText()));
                cust.setConsulid(considTF.getText());
                customerbooking.setFlightlocation(locationCB.getSelectedItem().toString());
                customerbooking.setFlighttime(timeCB.getSelectedItem().toString());
                customerbooking.setFlightfee(feeCB.getSelectedItem().toString());
                customerbooking.setCar(carRB.isSelected());
                customerbooking.setInsurance(insuranceRB.isSelected());

                oos.writeObject(customerbooking);
                oos.close();
                fos.close();

                custnameTF.setText("");
                custsurnameTF.setText("");
                custidTF.setText("");
                considTF.setText("");
                consnameTF.setText("");
                conssurnameTF.setText("");
                locationCB.setSelectedItem("");
                timeCB.setSelectedItem("");
                feeCB.setSelectedItem("");

1 个答案:

答案 0 :(得分:0)

简短的回答是" no"。

使用隐式顺序处理列表中的属性值以便映射到数据对象很脆弱。

但是,有时使用属性更改支持或bean来管理聚合对象的属性非常有用,尽管ArrayList是数据结构的不良选择,而不是Map of property-name to value或更全面的数据绑定解决方案,例如用于表示键的类型属性,用于将键映射到值的对,以及用于存储当前值和突变的数据结构。

某些地方必须将您的属性名称与数据对象类的访问者和更改者匹配。这可以使用库来完成,例如用于数据绑定或某些属性到字段映射的自定义解决方案,或者可能将您的状态存储在数据对象中的Map中。在保持类型安全的同时,有很多方法可以做到这一点,但是许多解决方案将属性作为String处理,将值作为Object处理,并丢弃类型信息和类型检查,这将是一个障碍。很好地实施它。

你问题的另一个相关部分应该是变革管理,只写出变化的事情。例如,如果您的某个字段发生更改,则不需要覆盖数据对象的所有其他字段,而只需覆盖不同的字段。无论您是移动到基于属性的更新模型还是明确使用访问器和更改器,您都应该对此进行调查。如果采用基于属性的方法,您可以在聚合中处理属性或通过委托给处理程序,UI中的代码应该蒸发并传递给可以处理类型安全,变更管理,触发后续更改事件的库,和其他相关问题。