【Java】JavaBeans

JavaBeansとは

値をまとめて格納するクラス(のインスタンス)。
ルールを守ったクラスを作成する必要がある。

ルール①:直列化可能である(java.io.Serializableを実装している)
ルール②:クラスはpublicでパッケージに所属する。
ルール③:publicで引数のないコンストラクタを持つ。※追加で引数を持つコンストラクタを定義しても良い
ルール④:フィールドはカプセル化されている。
ルール⑤:命名規則に従ったgetter/setterを持つ。

import java.io.Serializable;

//ルール②:クラスはpublicでパッケージに所属する
public class Member implements Serializable  {  // ルール①:直列化可能である
    // シリアライズ(なくても良い)
    private static final long serialVersionUID = 4405843158529915724L;

    // プロパティ変数
    private String name;  //ルール④:フィールドはカプセル化されている
    private int age;      //ルール④:フィールドはカプセル化されている

    // コンストラクタ
    public Member(){ }   //ルール③:publicで引数のないコンストラクタを持つ

    //ルール⑤:命名規則に従ったgetter/setterを持つ
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

作り方

1.プロパティ変数を作成
public class Member  {

    // プロパティ変数
    private String name;
    private int age;
}
2.getterおよびsetterの作成

ソース>getterおよびsetterの作成 f:id:vist764:20200312230917p:plain:w400

public class Member  {

    // プロパティ変数
    private String name;
    private int age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
toStringの作成

f:id:vist764:20210702143201p:plain:w400

public class Member  {

    // プロパティ変数
    private String name;
    private int age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "SampleVO [name=" + name + ", age=" + age + "]";
    }
}

使い方

public class Main {

    public static void main(String[] args){
        // インスタンス作成
        Member member = new Member();

        //set
        member.setName("なまえ");

        //get
        System.out.println(member.getName());

        //toString
        System.out.println(member);

    }
}

f:id:vist764:20210702143729p:plain:w300

シリアライズ

インスタンスをファイルに保存し、復元することができるようになる
Serializableインターフェイスを実装することでシリアライズ化される

public class Member implements Serializable  {

serialVersionUID

クラス構造のハッシュ値のようなもの。必須ではない。
記載があればデシリアライズ時にUIDを確認し、シリアライズ時と異なっていたらエラーになる。
コードに変更があった時には、この値を毎回変える
※Ctrl+1から作成できる
f:id:vist764:20200313000624p:plain:w500
※serialVersionUIDがないとエラーになる設定方法 f:id:vist764:20200311232652p:plain:w500

シリアライズ、デシリアライズ方法

        // インスタンスの作成
        Human human = new Human();
        human.setName("高橋");

        // シリアライズ
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("human.txt"))) {
            oos.writeObject(human);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // デシリアライズ
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("human.txt"))) {
            Human deHuman = (Human) ois.readObject();
            System.out.println(deHuman.getName());

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }