考慮這段代碼:是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反射這裏如果結構來避免。選擇框用於讓用戶決定他想要搜索的屬性,現在有6種可能性。我從其他學生那裏得到一些評論,認爲使用反思是'壞習慣'。是這樣嗎?爲什麼?
這是非常糟糕的,因爲這樣會使得你的用戶界面,以你的方法名,這應該是完全無關。稍後做出看似無害的改變會產生意想不到的災難性後果。 – shmosel
使用反射並不是一個壞習慣。 *做這種事*是一種不好的做法。當你想通過ID在幾個相似的對象中選擇一個更好的方法是從字符串到策略對象的映射。 – chrylis
@shmosel這並不一定是他們綁在一起,而是他們被捆綁得如此不透明。 – chrylis