"Kumusta, Amigo! Ngayon ay matututuhan natin ang tungkol sa isa pang kawili-wiling paksa. Sa partikular, ang pag-save at pag-load (reconstructing) mga bagay . Ipagpalagay na mayroon tayong klase ng Cat:"

Code
class Cat
{
 public String name;
 public int age;
 public int weight;
}

At sabihin nating gusto naming magdagdag ng isang maginhawang mekanismo para sa pag-save at pag-load mula sa isang file.

Magagawa natin ito ng ganito:

Code
class Cat {
    public String name;
    public int age;
    public int weight;

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.println(weight);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
        weight = Integer.parseInt(reader.readLine());
    }
}

"Wow! Napakadali! Sinusulat lang namin ang mga halaga ng bawat argumento, isa sa bawat linya. Kapag ni-load namin ang file, binabasa namin ang mga ito sa parehong pagkakasunud-sunod. Ito ang perpektong solusyon."

"Salamat, Amigo. Maaari mo na ngayong isulat ang mga paraan ng pag-save at pag-load para sa grupong ito ng mga klase:"

Code
class Cat
{
 public String name;
 public int age;
 public int weight;
}
class Dog
{
 public String name;
 public int age;
}
class Human
{
 public Cat cat;
 public Dog dog;
}

Mayroon kang bagay na Tao, na maaaring magkaroon ng isang aso at isang pusa.

"May solusyon ako:"

Code
class Cat {
    public String name;
    public int age;
    public int weight;

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.println(weight);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
        weight = Integer.parseInt(reader.readLine());
    }
}
Code
class Dog {
    public String name;
    public int age;

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
    }
}
Code
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        cat.save(writer);
        dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {
        cat.load(reader);
        dog.load(reader);
    }
}

"Napakagandang solusyon iyan. Ngunit ano ang mangyayari kung ang isang tao ay may aso ngunit walang pusa?"

Nasaan ang mga null check?

"Aayusin ko na:"

Code
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        if (cat != null)
            cat.save(writer);
        if (dog != null)
            dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {
        cat = new Cat();
        cat.load(reader);
        dog = new Dog();
        dog.load(reader);
    }
}

"Hindi pa rin ito tama. Mayroon kang dalawang pagkakamali:"

1) Maaaring walang pusa o aso ang isang tao, ngunit malilikha pa rin sila kapag tinawag ang paraan ng pag-load

2) Kung aso lang ang i-save natin, ang data nito ay mababasa ng pusa kapag na-load ito.

"Well, ano ang dapat kong gawin?"

"Hindi namin maaaring laktawan ang pagsusulat ng mga variable, kung hindi, magkakaroon kami ng mga problema habang binabasa . Kailangan mong tiyakin na ang mga variable na null sa panahon ng pag-save ng operasyon ay nakatakda sa null sa panahon ng pag-load ng operasyon. Narito ang aking bersyon:"

Code
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        String isCatPresent = cat != null ? "yes" : "no";
        writer.println(isCatPresent);
        writer.flush();

        if (cat != null)
            cat.save(writer);

        String isDogPresent = dog != null ? "yes" : "no";
        writer.println(isDogPresent);
        writer.flush();

        if (dog != null)
            dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {

        String isCatPresent = reader.readLine();
        if (isCatPresent.equals("yes")) {
            cat = new Cat();
            cat.load(reader);
        }

        String isDogPresent = reader.readLine();
        if (isDogPresent.equals("yes")) {
            dog = new Dog();
            dog.load(reader);
        }
    }
}

"Oo, gusto ko ang solusyon na ito."

"Oo, ang ganda."