0

AddressType という基本クラスがあります

また、HouseholdAddressType と PersonalAddressType という 2 つの子クラスがあります。(したがって、これらはどちらも AddressType を拡張します)

AddressType のリストを渡します。

List<AddressType> addresses

多くのメソッドに対応し、プリフォームはタスクによって異なるため、これらのタスクをプリフォームする前にこのリストを複製したいと考えています..

私はこれを試みました:

List<AddressType> copyOfAddress = new ArrayList<AddressType>(addresses.size());
    for (AddressType addressType: addresses) {
        copyOfAddress.add((AddressType)addressType.clone());         
    }

ただし、「クローンはアクセスを保護しています」と述べても機能しません

このリストのクローンを作成するにはどうすればよいですか? 私のクラス名の例は良いでしょう..どうもありがとう

4

1 に答える 1

3

クラスはインターフェースを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]
于 2012-07-04T23:21:20.883 に答える