【发布时间】:2018-02-20 07:31:51
【问题描述】:
怎样才能使这段代码不重复? 这种方法类似。
创建电话号码的方法:
private List<String> createPhoneNumbers(String sqlStatement, Long id) {
List<String> phones = new ArrayList<>();
try (PreparedStatement statement = this.connection.prepareStatement(sqlStatement)) {
statement.setLong(1, id);
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
phones.add(resultSet.getString("phoneNumber"));
}
return phones;
}
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
创建好友列表的方法:
private List<Account> createFriendList(String sqlStatement, Long id) {
List<Account> friends = new ArrayList<>();
try (PreparedStatement statement = this.connection.prepareStatement(sqlStatement)) {
statement.setLong(1, id);
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
friends.add(createSimpleElement(resultSet));
}
return friends;
}
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
创建组列表的方法:
private List<Group> createGroupList(String sqlStatement, Long id) {
List<Group> groups = new ArrayList<>();
try (PreparedStatement statement = this.connection.prepareStatement(sqlStatement)) {
statement.setLong(1, id);
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
groups.add(createGroupFromResultSet(resultSet));
}
return groups;
}
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
这是我非常糟糕的解决方案。
//field values: 1- create String, 2 - createAccount, 3 - createGroup
private <E> List<E> createList(String selectSql, Long id, int field) {
List<E> list = new ArrayList<>();
try (PreparedStatement statement = this.connection.prepareStatement(selectSql)) {
statement.setLong(1, id);
try (ResultSet resultSet = statement.executeQuery()) {
while (resultSet.next()) {
switch (field) {
case 1:
list.add((E) resultSet.getString("phoneNumber"));
break;
case 2:
list.add((E) createSimpleElement(resultSet));
break;
case 3:
list.add((E) createGroupFromResultSet(resultSet));
break;
}
}
return list;
}
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
我可以阅读什么来解决我的代码中的类似问题?
【问题讨论】:
-
不要。拥有只做一件事并做好的方法是一种很好的做法。如果需要,您可以随时使用接口或抽象类。
-
你可以阅读设计模式并通过编写代码来尝试它们,tutorialspoint.com/design_pattern