このコードを重複なく作成するにはどうすればよいですか? この方法も同様です。どうすればこのメソッドを重複なく書き直すことができますか?
電話番号を作成する方法:友達リストを作成する
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;
}
}
私のコードで同様の問題を解決するにはどうすればよいですか?
しないでください。一つのことをしてうまくやる方法を持つのがよい習慣です。必要に応じて、いつでもインタフェースや抽象クラスを使用できます。 –
デザインパターンを読んで、 をコードを書くことで試してみることができます。https://www.tutorialspoint.com/design_pattern/ – saurabh