【问题标题】:Designing methods for manipulating arraylist in javajava中操作arraylist的设计方法
【发布时间】:2023-01-25 09:12:15
【问题描述】:

我正在 main 中创建对象的 ArrayList,并且需要创建单独的公共方法以从 main 外部对它们进行各种操作。 但是这样的方法看不到我的ArrayList。例如,如果对象是具有某些字段(如姓名)的 Person,我需要一个单独的方法来访问 Persons 列表,遍历它,查看是否已经存在具有此名称的人以更改或检索名称。

public static void main(String[] args) {
    
    ArrayList<Person> personList = new ArrayList<Person>();
    Person person1 = new Person("Daniel");
    personList.add(person1);
            
}
public boolean changeName(String name) {
    //how to reach the list to iterate and manipulate it from here?     
return true;
    
}

【问题讨论】:

  • 您可以将 ArrayList 的范围从局部变量更改为字段,或者将其作为参数传递给方法。
  • 只是因为设计是问题的一部分:在您的问题上下文中,直接公开和传递数据结构有点难闻。考虑创建一个封装列表的类,例如 People。该类将提供方法,例如 changeName(...),并传递 People 对象(而不是裸数据结构)。

标签: java oop arraylist


【解决方案1】:

您可以在 main 方法之外声明列表,使其成为类的全局列表,如下所示:

public class Main{

     //making your list accessible to other methods within the class
     static ArrayList<Person> personList;
     public static void main(){
         personList = new ArrayList<Person>();
         Person person1 = new Person("Daniel");
         personList.add(person1);
     }
     //Your methods ...
     // ...
}

您也可以将列表传递给方法的参数:

public static void addPerson(ArrayList<Person> list, Person person){
    list.add(person);
}

【讨论】:

  • 谢谢!但是这些公开列表的方法不会破坏封装吗?
  • 正如所写,您已将 personList 声明为类 Main 的实例成员。不过,您的 main() 方法是静态的,它应该是静态的。但是由于main()是静态的,它不能引用实例成员personList。静态方法只能访问其他静态方法和静态成员。然而,事实并非如此。实例方法可以访问实例和静态成员。
  • @rainbow 嗯...破坏封装​​是什么意思?在 Person 类中一切都很好......关于 main 方法所在的类,如果你担心其他类可以访问“personList”,你可以将其声明为私有,虽然默认情况下“personList”只能在同一包的类(“文件夹”)
  • @Idle_Mind ,是的,有道理,忘了在字段中添加静态关键字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2017-03-07
  • 1970-01-01
  • 2016-03-05
  • 2017-08-17
相关资源
最近更新 更多