【问题标题】:Getting a property of an object in an arraylist of objects在对象数组列表中获取对象的属性
【发布时间】:2013-01-22 00:00:54
【问题描述】:

好的,所以我创建了一个名为 Food 的对象,它具有描述食物的各种属性(蛋白质(以克为单位)、卡路里、碳水化合物等)。然后我创建了一个名为Foodlist 的类,它读取一个excel 表,为电子表格的每一行创建一个新的Food 对象(用该行列中的信息填充对象); Foodlist 类然后创建一个 ArrayList 的 Food 对象。 我现在想创建一个ProteinList,它是FoodList 的子列表,并且有一种方法可以将所有高蛋白食物分成一个数组。 Proteinlist 扩展 Foodlist,如何访问列表中 Food 对象的“蛋白质”属性?

这是我的代码卡住的地方:

    public Food[] groupProtein() {
        for(int i = 0; i < foodList.size(); i++)
        {
            if(foodList.get(i).protein > 6){//HERE IS THE PROBLEM, trying to get the property of the food object at i
                proteinFoods.add(foodList.get(i));
            }
        }

        Food[] temp = new Food[proteinFoods.size()];
        for (int i = 0; i < temp.length; i++) {
            temp[i] = proteinFoods.get(i);
        }

        return temp;
    }

【问题讨论】:

  • proteinFood 中是如何定义的?可公开访问的字段,还是只能通过 getter/setter 访问?
  • 我把它们都放在一个包里。如果我要使用 getter 方法,我将如何访问它? foodlist.get(i).getProtein() 并将其存储在局部变量中?
  • 如果Food有getter,你可以做foodList.get(i).getProtein()假设getProtein()是getter方法。
  • 为什么不在你的食物列表类中放置一个方法,能够返回高蛋白食物的子集?
  • 谢谢,我现在就试试 :),我还没有这样做,因为我对语法感到困惑。我有另一个类使用了几个“。”一行中的方法访问器并不断收到有关“不安全方法”的奇怪编译器错误

标签: java oop arraylist


【解决方案1】:

如果您的 protein 属性有一个 getter,您的方法可能是:

public Food[] groupProtein() {
    for(Food food : foodList)
    {
        if(food.getProtein() > 6){
            proteinFoods.add(food);
        }
    }

    return proteinFoods.toArray(new Food[0]);
}

我想proteinFoodsList&lt;Food&gt;...对吗?

【讨论】:

    【解决方案2】:
    public class ProteinList extends FoodList{
        //other stuff...
        public double get(int i){
            return super.get(i).getProtein();
        )
    }
    

    这就是你想要的?

    【讨论】:

    • 'protein" 不是一个对象,它是一个具有 Food 对象的 int 值的属性。我不认为它可以这样返回^
    • 蛋白质是int吗?还是dobule?还是什么?
    【解决方案3】:

    如果属性protein 在您的类定义中定义为private,您将无法从类外的任何方法访问它。您将需要在您的类中定义一个 getter 方法

    public class Food {
        ...
        public int getProtein() {
            return protein;
        }
        ....
    }
    

    因此,您可以从类外的方法中读取值:

    foodList.get(i).getProtein()
    

    我假设foodList 已正确定义,因此get(i) 方法将返回Food 对象(或任何要返回的类)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2017-06-29
      • 1970-01-01
      • 2018-11-28
      • 2022-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多