如何通过函数加载自定义对象的arraylist?

时间:2016-02-18 15:09:54

标签: java arraylist

我可能在弱OO基础上磕磕绊绊但是如何通过主程序中的函数优雅地加载我的自定义对象的arraylist?

我希望它能从主要内容看起来像这样:

public static String calculateAverage(final List<String> letters) {

    int numberOfA = 0;
    int numberOfB = 0;
    int numberOfC = 0;
    int numberOfD = 0;
    for (String letter : letters) {
        if (letter.equalsIgnoreCase("A")) {
            numberOfA++;
        }
        if (letter.equalsIgnoreCase("B")) {
            numberOfB++;
        }
        if (letter.equalsIgnoreCase("C")) {
            numberOfC++;
        }
        numberOfD++;
    }

    int average =
        (numberOfA * 1 + numberOfB * 2
            + numberOfC * 3 + numberOfD * 4)
            / letters.size();

    if (average>=1 && average<2) return "A";
    if (average>=2 && average<3) return "B";
    if (average>=3 && average<4) return "C";
    return "D";
}

我无法确定什么是正确的事情:

  • 扩展ArrayList类似乎很糟糕
  • 主要用arraylist作为参数传递的
  • 方法看起来很难看
  • 由于mylist是arraylist的一个实例,MyObject类中的
  • 方法不起作用

当然我会连接到db并在该函数中迭代我的结果集,对于标准对象我没有任何问题。

3 个答案:

答案 0 :(得分:0)

如果你想拥有一个有这种方法的列表,你应该创建自己的类

class MyList<T> {

    private ArrayList<T> storage = new ArrayList<>();

    public void fetchFromDb() {
        // ...
    }

}

但是我认为你应该创建一个填充列表的单独函数,因为list函数不是从数据库中获取数据,而是提供存储和检索元素的功能。

答案 1 :(得分:0)

您无法在 Java 中实现这一目标,而无需扩展ArrayList或(甚至更难,使用委托对象)。

答案 2 :(得分:0)

不是说你不能这样做,而是在谈论将方法FetchFromDb()添加到Java的ArrayList对象。

更合适的做法是向对象添加一个FetchFromDb(),它返回一个MyObject列表,然后用它初始化ArrayList。

public class MyObject{
    //...
    public static ArrayList<Node> FetchFromDb(){
        //Code to get all the objects and add them to a list
        //Return the list
    }
}

然后你可以调用静态方法

ArrayList<MyObject> mylist = MyObject.FetchFromDb();

另一种选择是使用其他人建议的DAO,你可以阅读here