有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javafx是Java反射的坏习惯吗?

考虑这段代码:

public void doSearch(ActionEvent event) {
    String query = searchTextField.getText();
    if (query.isEmpty()) {
        data = FXCollections.observableArrayList(dc.getJobCoachRepo().getList());
        usersTableView.setItems(data);
    } else {

        String searchOn = "search" + searchChoiceBox.getValue();
        try {
            Method m = this.getClass().getMethod(searchOn, String.class);
            m.invoke(this, query);
        } catch (Exception e) {

        }
    }
}

public void searchFirstName(String query) {
    data = FXCollections.observableArrayList(dc.getJobCoachRepo().searchFirstName(query));
    usersTableView.setItems(data);

}
...
...

我在这里使用java反射来避免if构造。choicebox用于让用户决定要搜索的属性,目前有6种可能性。我从其他学生那里得到一些评论,认为使用反思是“糟糕的做法”。是这样吗?为什么


共 (1) 个答案

  1. # 1 楼答案

    是的,反射很慢,以这种方式使用时会产生脆弱的代码

    如果要避免使用If语句,应该使用多态性。使用public void search(String query)创建一个接口Searcher,为每种类型的搜索创建实现,然后将每个实现的一个实例作为Map<String, Searcher>的值,由搜索选择框的值键入

    因为Java枚举是对象,所以也可以使用枚举作为映射。每个枚举值将定义它们自己的search(string)实现。然后可以使用SearchEnumTypeName.valueOf(searchChoiceBox.getValue()).search(query)调用所需的实现