"Helo, Amigo! Hari ini kita akan belajar tentang topik menarik lain. Khususnya, menyimpan dan memuatkan (membina semula) objek . Katakan kita mempunyai kelas Cat:"

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

Dan katakan kita mahu menambah mekanisme yang mudah untuk menyimpan dan memuatkan daripada fail.

Kita boleh melakukannya seperti ini:

Kod
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());
    }
}

"Wah! Itu sangat mudah! Kami hanya menulis nilai setiap hujah, satu pada setiap baris. Apabila kami memuatkan fail, kami membacanya dalam susunan yang sama. Ia adalah penyelesaian yang sempurna."

"Terima kasih, Amigo. Kini anda boleh menulis kaedah simpan dan muat untuk kumpulan kelas ini:"

Kod
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;
}

Anda mempunyai objek Manusia, yang boleh mempunyai seekor anjing dan seekor kucing.

"Saya ada penyelesaian:"

Kod
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());
    }
}
Kod
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());
    }
}
Kod
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);
    }
}

"Itu penyelesaian yang sangat baik. Tetapi apa yang berlaku jika manusia mempunyai anjing tetapi tiada kucing?"

Di manakah cek batal?

"Saya akan membetulkannya sekarang:"

Kod
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);
    }
}

"Ia masih tidak betul. Anda mempunyai dua ralat:"

1) Seseorang mungkin tidak mempunyai kucing atau anjing, tetapi mereka masih akan dibuat apabila kaedah pemuatan dipanggil

2) Jika kita hanya menyelamatkan seekor anjing, datanya akan dibaca oleh kucing apabila ia dimuatkan.

"Nah, apa yang perlu saya lakukan?"

"Kami tidak boleh melangkau menulis pembolehubah, jika tidak, kami akan menghadapi masalah semasa membaca . Anda perlu memastikan pembolehubah yang nol semasa operasi simpan ditetapkan kepada nol semasa operasi memuatkan. Ini versi saya:"

Kod
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);
        }
    }
}

"Ya, saya suka penyelesaian ini."

"Ya, ia bagus."