Обобщение одного и того же набора методов для разных переменных

Привет 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> или какой класс они держат)

Другие вопросы по тегам