有什么方法可以解决此问题而无需重复列代码?

时间:2020-07-29 18:49:24

标签: java javafx fxml

请提供任何帮助。我有一个称为私有无效更新数据库的方法,其内部代码如下。我想知道有什么方法可以缩短代码而无需重复吗?

    firstNameColumn.setOnEditCommit(event -> {
        Customer customer = event.getRowValue();
        customer.setFirstName(event.getNewValue());
        try {
            Utils.getInstance().update("firstName", event.getNewValue(), customer.getId());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    });
    middleNameColumn.setOnEditCommit(event -> {
        Customer customer = event.getRowValue();
        customer.setFirstName(event.getNewValue());
        try {
            Utils.getInstance().update("middleName", event.getNewValue(), customer.getId());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    });
    lastNameColumn.setOnEditCommit(event -> {
        Customer customer = event.getRowValue();
        customer.setFirstName(event.getNewValue());
        try {
            Utils.getInstance().update("lastName", event.getNewValue(), customer.getId());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    });

我具有以下字段:名列,中间名列和姓氏列,但是它们在方法内重复。

2 个答案:

答案 0 :(得分:1)

是的。

到目前为止,我看到三个更新中使用了下一个代码:

    Customer customer = event.getRowValue();
    customer.setFirstName(event.getNewValue());
    try {
        Utils.getInstance().update("xxxx", event.getNewValue(), customer.getId());
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }

它只是通过firstName,middleName或lastName更改xxx。

您可以创建一个将由三个更新调用的函数。

    firstNameColumn.setOnEditCommit(event -> {
        updateCustomerBy("firstName", event);
    });
    middleNameColumn.setOnEditCommit(event -> {
        updateCustomerBy("middleName", event);
    });
    lastNameColumn.setOnEditCommit(event -> {
        updateCustomerBy("lastName", event);
    });

private void updateCustomerBy(String name, Event event){
   //I dont know the type of event, so i just put Event. You shall use the correct type
    Customer customer = event.getRowValue();
    customer.setFirstName(event.getNewValue());
    try {
        Utils.getInstance().update(name, event.getNewValue(), customer.getId());
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

答案 1 :(得分:0)

       firstNameColumn.setOnEditCommit(event -> {
       update("firstName",event)
        });
       middleNameColumn.setOnEditCommit(event -> {
 update("middleName",event) });
      lastNameColumn.setOnEditCommit(event -> {
     update("lastName",event)});

       public void update(String column,Event event){
      
            Customer customer = event.getRowValue();
            customer.setFirstName(event.getNewValue());
            try {
                Utils.getInstance().update(column, event.getNewValue(),         customer.getId());
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
    }