我有一个名为AddressType的基类
我也有两个子类,称为HouseholdAddressType,PersonalAddressType。
(所以这些都扩展了AddressType)
我传递了一个AddressType列表:
List<AddressType> addresses
的方法很多,并且预执行的任务各不相同,因此我想在执行这些任务之前先克隆此列表。
我试图这样做:
List<AddressType> copyOfAddress = new ArrayList<AddressType>(addresses.size());
for (AddressType addressType: addresses) {
copyOfAddress.add((AddressType)addressType.clone());
}
但是它不能说明:“克隆具有受保护的访问权限”
如何复制此列表?
带有我的班级名称的示例会很好..非常感谢
最佳答案
类AddressType
必须实现Cloneable
接口,
import java.util.ArrayList;
import java.util.List;
public class Foo {
public static void main(String[] args) {
List<Person> oldList = new ArrayList<Person>(1);
oldList.add(new Person("Harry", "Potter"));
List<Person> newList = new ArrayList<Person>();
for(Person person : oldList)
{
newList.add(person.clone()); // Deep copy of each person too.
}
Person person = newList.get(0);
person.setFirstName("James");
System.out.println("Old list = " + oldList);
System.out.println("New list = " + newList);
}
static class Person implements Cloneable
{
private String firstName;
private String lastName;
Person(String firstName, String lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
private Person(Person person)
{
this.firstName = person.firstName;
this.lastName = person.lastName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getFirstName()
{
return firstName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
public String getLastName()
{
return lastName;
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append(firstName);
sb.append(" ");
sb.append(lastName);
return sb.toString();
}
@Override
public Person clone()
{
return new Person(this);
}
}
}
输出
Old list = [Harry Potter]
New list = [James Potter]
关于java - 克隆基类的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11336303/