2

ドーザーでは、値をnullではなく空のオブジェクトにグローバルに初期化する方法

例:

Class Person
{
public Address address;
//getters and setters for address

}

Class Address
{
String addressField1;
String addressField2;
}

同様に、Person と Address に似たオブジェクト PersonVO と AddressVO があります。

ドーザーを使用して値をマッピングした後、アドレス値が Person オブジェクトで null の場合、結果はnull ポインター例外personvo.getAddressVO.getAddressField1()をスローしますが、これを回避する方法はありますか?

カスタムコンバーターを使用すると、カスタムコンバーターで値を設定する一般的な方法を実行することになり、ドーザーを使用する目的が無効になります。

4

3 に答える 3

1

Dozer で宛先オブジェクトを初期化する方法があります。

  1. 宛先オブジェクトのファクトリ クラスを定義します。
  2. 上記のファクトリ クラスのメソッドとして、宛先オブジェクトの create-method を指定します。

あなたの例を見てください。Person を PersonVO に、Address を AddressVO にマップしたいと思います。

PersonVO のファクトリ クラスを作成する

public abstract class PersonVOFactory {
    private PersonVOFactory() {
    }
    public static PersonVO createPersonVO() {
        PersonVO personVO = new PersonVO();
        personVO.setAddressVO(new AddressVO());
        return personVO;
    }
}

上記の create メソッドを Person から PersonVO へのマッピングに指定します。

<mapping map-id="person-mapping">
    <class-a>Person</class-a>
    <class-b create-method="PersonVOFactory.createPersonVO">PersonVO</class-b>
    <field>
        <a>address.addressField1</a>
        <b>addressVO.addressField1</b>
    </field>
    <field>
        <a>address.addressField2</a>
        <b>addressVO.addressField2</b>
    </field>
</mapping>

これで、ステートメントpersonvo.getAddressVO.getAddressField1()は NPE をスローしなくなりました。

于 2016-04-26T12:39:48.530 に答える
0

クラスのセッターメソッドを変更できる場合はPersonVO、次のようにできます。

public void setAddressVO(AddressVO address) {
    this.addressVO = address == null ? new AddressVO() : address;
}

したがって、フィールドaddressVOが決してではないことを確認できますnull

次の理由により、これはかなり汚いことに注意してください。

  1. 人が住所を持っていない場合、彼の住所フィールドは空のオブジェクト null ではなくすべきです。AddressVO
  2. クラスのほとんどのユーザーは、 set メソッドが値を設定し、それ以上何もしないことを期待するため、このようなカスタマイズされたセッターは悪い習慣です。オプションで新しいメソッドを作成し、構成ファイルの属性initAddressVOを使用して dozer からこのメソッドを呼び出すことができます。set-method

アドレスが null であるかどうかを確認してifNullPointerException.

于 2012-06-27T07:53:40.610 に答える
0

非静的データ メンバーを持たないオブジェクトは、すべての非静的データ メンバーがヒープ内のオブジェクト内に存在するため、空のオブジェクトと呼ばれます。したがって、非静的データ メンバーがない場合、オブジェクトは空になります。ただし、NULL ではありません。

空のオブジェクト: 非静的データ メンバーを持たないオブジェクト。

Null オブジェクト: 参照を持たないオブジェクト、つまり null 参照。

于 2013-09-28T18:08:39.140 に答える