【问题标题】:Java, call object methods through arraylistJava,通过arraylist调用对象方法
【发布时间】:2013-08-28 11:06:07
【问题描述】:

基于这个问题Increment variable names?

我有一个数组列表“peopleHolder”,其中包含各种“人”对象。 我想基于 for 循环自动创建“人”对象。 我做了以下

    peopleHolder.add(new person());

我想从 person 类中调用方法。例如person.setAge; 如何通过数组列表调用此类方法? 我想要为每个对象设置值的方法。 我看过这个答案:Java - calling methods of an object that is in ArrayList
但我认为解决方案取决于调用静态方法,并且我希望在存储对象值时使用特定于对象的方法。

【问题讨论】:

  • 你的问题不清楚,什么意思?
  • 我有几个人对象。我使用循环自动在“人员”arrayList 中创建新的人员对象。我想访问定义对象各种特征的方法(setAge、setHeight 等)。如何访问我在 arraylist 中创建的对象的这些方法。
  • 你想在 person 类中创建 Arraylist 引用,对吗?
  • ArrayList peopleHolder = new ArrayList();peopleHolder.add(new Person());for(Person p:peopleHolder){p.setAge();}

标签: java oop object arraylist


【解决方案1】:

如果您想在列表中的所有对象上调用某个方法,您需要先迭代它们并在每个元素中调用方法。假设您的列表如下所示

List<person> peopleHolder = new ArrayList<person>();
peopleHolder.add(new person());
peopleHolder.add(new person());

现在我们在列表中有两个人,我们想设置他们的名字。我们可以这样做

for (int i=0; i<list.size(); i++){
    list.get(i).setName("newName"+i);//this will set names in format newNameX
}

或者使用增强的for循环

int i=0;
for (person p: peopleHolder){
    p.setName("newName" + i++);
}

顺便说一句,您应该坚持使用Java Naming Conventions 并使用驼峰式风格。类/接口/枚举应该以大写字母开头,例如Person,变量/方法名称的第一个标记应该以小写开头,但其他的以大写字母开头,例如peopleHolder

【讨论】:

  • 很确定应该是list.get(i) 而不是list.get(0)
  • 感谢 Pshemo。在 setName 方法中为什么要添加 i?
  • @HJ 我用i 来设置不同的名字,比如newName0newName1,等等:)
【解决方案2】:

这是你要找的吗?

for(person people: peopleHolder){
people.setAge(25);
}

【讨论】:

    【解决方案3】:

    我有几个人对象。我自动创建新人 使用循环的 'people' arrayList 中的对象。我想访问 定义对象的各种特征的方法(setAge, setHeight 等)如何访问我拥有的对象的此类方法 在我的数组列表中创建

    以与您创建相同的方式。

    对于列表中的每个人,您都可以对其进行迭代

    for(Person person : peopleHolder){
      person.setHeight(..);
      person.setAge(..)
    }
    

    对于列表中的某些索引,您可以使用get(int index),因为您的列表是一个 arrayList,那么它是 O(1)。

     Person p = peopleHolder.get(someIndex); // where  0 <= someIndex < peopleHolder.size()
     p.setHeight(..);
    

    【讨论】:

      【解决方案4】:

      按照您的代码,您可以做到这一点

      ArrayList<Person> personHolder = new ArrayList<Person>();
      
      for (int i = 0; i < 10; i++) {
      
          personHolder.add(new Person());
      
      }
      
      // If you want user input, do it in the loop below
      for (Person p : personHolder) {
      
          p.setAge(30);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-18
        • 1970-01-01
        • 2013-06-08
        • 2019-05-12
        • 1970-01-01
        • 2017-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多