"Halo, Amigo! Hari ini kita akan belajar tentang topik menarik lainnya. Secara khusus, menyimpan dan memuat (merekonstruksi) objek . Misalkan kita memiliki kelas Cat:"

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

Dan katakanlah kita ingin menambahkan mekanisme yang nyaman untuk menyimpan dan memuat dari file.

Kita bisa melakukannya seperti ini:

Kode
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! Itu sangat mudah! Kami hanya menulis nilai dari setiap argumen, satu di setiap baris. Saat kami memuat file, kami membacanya dalam urutan yang sama. Ini adalah solusi yang sempurna."

"Terima kasih, Amigo. Sekarang Anda dapat menulis metode simpan dan muat untuk grup kelas ini:"

Kode
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 memiliki objek Manusia, yang dapat memiliki satu anjing dan satu kucing.

"Saya punya solusinya:"

Kode
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());
    }
}
Kode
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());
    }
}
Kode
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 solusi yang sangat bagus. Tapi apa jadinya kalau manusia punya anjing tapi tidak punya kucing?"

Di mana cek nol?

"Aku akan memperbaikinya sekarang:"

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

"Itu masih belum benar. Anda memiliki dua kesalahan:"

1) Seseorang mungkin tidak memiliki kucing atau anjing, tetapi mereka akan tetap dibuat saat metode beban dipanggil

2) Jika kita hanya menyimpan seekor anjing, datanya akan dibaca oleh kucing saat dimuat.

"Yah, apa yang harus aku lakukan?"

"Kita tidak bisa melewatkan penulisan variabel, jika tidak kita akan mengalami masalah saat membaca . Anda perlu memastikan bahwa variabel yang null selama operasi penyimpanan disetel ke null selama operasi pemuatan. Ini versi saya:"

Kode
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 solusi ini."

"Ya, itu bagus."