将同一组方法推广到不同的变量

Generalizing same set of methods to different variables

问候 Whosebug,

我有一个问题要问你们是否有可能,如果可以,如何将同一组方法概括为不同的变量组?

让我们用一个例子来说明这一点:假设我们有变量,它们都声明了相同的方法。在这个简单的例子中,假设 2 个变量设置了 setter 和 getter,如下所示:

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-statement,如下所示:

String input;

if (input.equals("football")) {
    getFootball();
}

if (input.equals("jogging")) {
    getJogging();
} 

如果我们有很长的变量列表,这段代码就会变得很长而且相当乏味。有没有一种方法可以概括这段代码并减少重复,例如类似这样的代码(我意识到这行不通):

String input = X;
if (getX == true) {
     return X;

感谢您的回答!

最简单的方法是使用地图:

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);

        //...
    }
}

喜欢这个class的用户可以使用静态字符串(固定字符串减少错误的可能性)并且你可以轻松添加新的运动


旁注:

LinkedList<> 适用于泛型,应该参数化。 (比如 LinkedList<String> 或他们持有的任何 class)