JavaBeanの作成の詳細について

2228 ワード

例えばUser classを作成する
通常モード:
setterはvoid、変数、getterを返し、setterはJavabean仕様に合致します.

public class User {
	private int id;
	private String user;
	public User(){}
	
	public User(int id , String user){
		this.id = id;
		this.user = user;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public  String getUser() {
		return user;
	}

	public void setUser(String user){
		this.user = user;
	}
	
}

拡張モード:
setterはthis(現在のbeanインスタンス)を返しますが、setterのモードはJavaBeanの仕様ではありません.
setterがこのように書くメリットは、設定値を連続的にポイント法でナビゲートできることです.
user.setId("020-001").setUser("toby");

public class User{
        private int id;
	private String user;
	public User(){}
	
	public User(int id , String user){
		this.id = id;
		this.user = user;
	}

	public int getId() {
		return id;
	}

	public User setId(int id) {
		this.id = id;
                return this;    // has return
	}

	public  String getUser() {
		return user;
	}

	public User setUser(String user){
		this.user = user;
                return this;  // has return
	}
}

チェーン呼び出しは一般的にはあまり役に立たないようですが、プロパティの数が多すぎる場合はコードを節約できます.
補足:

public void listPropertyNames(Class c) throws IntrospectionException{
    PropertyDescriptor [] pd;
    pd = Introspector.getBeanInfo(c).getPropertyDescriptors();
    for(int i=0;i<pd.length;i++){
        System.out.println(pd[i].getName()
                                     + "(" + pd[i].getProperty().getName() + ")");
    }
}
//listPropertyNames(User.class)

//output ->class(java.lang.Class)
//         id(int)
//         user(java.lang.String)


Introspectorクラスを使用して、あるbeanのPropertyDescriptorオブジェクトのリストを取得し、そのbeanのプロパティ名とタイプを巡回表示します.この方法はバグの位置決めに非常に有用である.(「ibatis in action」からの紹介)