Обобщение одного и того же набора методов для разных переменных
Привет Stackru,
У меня вопрос к вам, ребята, возможно ли, и если да, то как, обобщить один и тот же набор методов, сделать другой набор переменных?
Давайте проиллюстрируем это на примере: предположим, у нас есть переменные, которые ВСЕ имеют одинаковые объявленные методы. В этом простом случае, скажем, 2 переменные имеют наборы сеттеров и геттеров, например:
private LinkedList football = new LinkedList();
private LinkedList jogging = new LinkedList();
public LinkedList getFootball() {
return football;
}
public void setFootball(LinkedList football) {
this.football = football;
}
public LinkedList getJogging() {
return jogging;
}
public void setJogging(LinkedList jogging) {
this.jogging = jogging;
}
Теперь давайте скажем, что существует определенный тип ввода, который определяет, какие из этих переменных будут приняты и их методы будут вызваны. Важно отметить, что эти методы имеют одно и то же действие, но только с другой переменной. Один из способов (самый простой), как это сделать, был бы с помощью оператора if следующим образом:
String input;
if (input.equals("football")) {
getFootball();
}
if (input.equals("jogging")) {
getJogging();
}
Если у нас длинный список переменных, этот код становится длинным и довольно утомительным. Есть ли способ обобщить этот код и сделать его менее повторяющимся, например, что-то похожее на это (я понимаю, что это не сработает):
String input = X;
if (getX == true) {
return X;
Спасибо за ответ!
1 ответ
Самый простой способ сделать это - использовать карту:
public static final String footballStr = "football";
public static final String joggingStr = "jogging";
private Map<String, LinkedList> sports = new HashMap<>();
{
sports.put(footballStr, new LinkedList());
sports.put(joggingStr, new LinkedList());
}
public LinkedList getSportsByInput(String key)
{
if (sports.containsKey(key))
{
LinkedList ll = sports.get(key);
//...
}
}
Таким образом, пользователь этого класса может использовать статические строки (фиксированные строки уменьшают вероятность ошибок), и вы можете легко добавлять новые виды спорта.
Примечание:
LinkedList<>
работает с дженериками и должен быть параметризован. (лайк LinkedList<String>
или какой класс они держат)