当用作另一个对象的成员变量时,如何设置和检索ArrayList

时间:2015-07-18 08:51:36

标签: java arraylist

我有以下代码:

 public class Address {

    private String city;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

}

我还有另一个UserArrayList<Address>作为成员变量,如下所示。

import java.util.ArrayList;

public class User {

    private String name;
    private ArrayList<Address> listOfAddresses ;

    public ArrayList<Address> getListOfAddresses() {
        return listOfAddresses;
    }

    public void setListOfAddresses(ArrayList<Address> listOfAddresses) {
        this.listOfAddresses = listOfAddresses;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

在使用main方法的类中,我创建了具有两个成员变量的用户对象,例如name和listofAddresses。现在,我需要一些有关如何使用用户对象设置listOfAddresses值的指导。以及如何使用用户对象进行检索。

我的主要班级看起来像这样。

import java.util.ArrayList;

public class ArrayImpl {

    public static void main(String[] args) {

        User user = new User();
        user.setName("First User");

        Address address = new Address();
        address.setCity("Melbourne");

        user.setListOfAddresses(address);   

    }

}

我在user.setListofAddressess(address)收到错误:

  

User类型中的setListOfAddresses(ArrayList)方法   不适用于参数(地址)

我的理解是listOfAddresses是Address类型的ArrayList,因此我试图使用listOfAddresses成员变量的setter方法来设置它的值。

有人可以帮助我如何设置listOfAddresses并使用user对象进行检索。

3 个答案:

答案 0 :(得分:1)

您主要有两种选择:

丑陋的方式 您可以通过调用Getter,然后添加新地址,然后使用新列表调用Setter来检索当前的地址列表:

List<Address> addresses = user.getListOfAddresses();
addresses.add(address);
user.setListOfAddresses(addresses);

聪明而酷炫的方式 您的班级User为代表提供了添加和删除地址的权限。为此,请在User课程中为您的目的添加方法:

public void addAddress(Address a) {
    this.listOfAddresses.add(a);
}

答案 1 :(得分:0)

User类中setListOfAddresses的方法定义将ArrayList<Address>类型的对象作为参数,但在您的主要文件中,您尝试传递一个Address实例。

这是正确的方法:

ArrayList<Address> addrList = user.getListOfAddresses(); 
if (addrList == null) { 
   //If it's the first address you insert, you have to initialize the ArrayList
   addrList = new ArrayList<Address>();
}
addrList.add(address);

然后直截了当地检索每个地址:

ArrayList<Address> addrList = user.getListOfAddresses();
for (Address a : addrList) {
   //do something with a....
}

答案 2 :(得分:0)

您正在尝试在用户对象中设置'address'类型的变量,但您应该设置ArrayList类型的对象。

User user = new User();

ArrayList<Address> ar=new ArrayList<>();
Address ad1=new Address();
ad1.setCity("Melbourne");
ar.add(ad1);

user.setListOfAddresses(ar);