2012-06-25 4 views
2

의 빈 객체 :도저 - 전 세계적으로 예를 들어 빈 객체 대신에 널 (null)</p> <p>에 값을 초기화 어떻게 도저에서 NULL 대신

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

} 

Class Address 
{ 
String addressField1; 
String addressField2; 
} 

은 마찬가지로 내가 객체 PersonVO 및 AddressVO이 사람과 유사했다 주소 값이 널 포인터 예외가 발생합니다 personvo.getAddressVO.getAddressField1()의 결과보다, Person 객체의 null 경우, 도저를 사용하여 값을 매핑 한 후

주소, 어떤 방식이있다 이것을 피하시오?

사용자 지정 변환기를 사용하는 경우 사용자 지정 변환기에서 값을 설정하는 일반적인 방법으로 끝나고 도저 사용의 목적을 무력화 할 것입니다. 당신이 PersonVO 클래스의 setter 메소드를 수정할 수있는 경우

답변

0

, 당신은 다음과 같이 할 수있는 :

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

따라서 당신은 필드 addressVO 결코 null 없다는 것을 확실 할 것이다. 사람이 어떤 주소가없는

  1. 경우, 자신의 주소 필드가 빈 AddressVO 객체가 아닌 null 을해야한다 :

    이 때문에 오히려 지저분 있습니다.
  2. 과 같은 사용자 정의 된 설정자는 클래스의 대부분 사용자가 set 메소드가 값을 설정하고 더 이상 아무것도하지 않을 것으로 예상하므로 좋지 않은 방법입니다. 선택적으로 initAddressVO 메서드를 새로 만들고 구성 파일의 set-method 특성을 사용하여 도우저 에서이 메서드를 호출 할 수 있습니다.
일부 ifNullPointerException을 피하기 위해와 주소가 null의 경우 확인 (가능하다면) 그것은 훨씬 더 좋을 것이다

.

+0

나는 비슷한 생각을 가지고있다. null을 확인하는 것은'personvo.getAddressVO(). getAddressField1()'에 접근 할 코드는 생성 된 코드이고 어떤 옵션이 있는지 확실하지 않다. 널 체크를 생성하는 것. –

0

정적이 아닌 모든 데이터 멤버가 힙의 객체 내에 있기 때문에 비 정적 데이터 멤버가없는 객체를 빈 객체라고합니다. 따라서 정적이 아닌 데이터 멤버가없는 경우 객체는 비어 있습니다. 그러나 NULL은 아닙니다.

빈 개체 : 비 정적 데이터 멤버가없는 개체입니다.

null 개체 : 참조가없는 개체 즉 null 참조;

0

Dozer에서 대상 객체를 초기화하는 방법이 있습니다.

  1. 대상 객체에 대한 팩토리 클래스를 정의하십시오.
  2. 대상 객체의 작성 메소드를 위의 팩토리 클래스의 메소드로 지정하십시오.

예를 들어 Person을 PersonVO에 매핑하고 Address를 AddressVO에 매핑하려고한다고 가정합니다.

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

위는 사람 매핑을 PersonVO하기위한 방법을 만들 지정 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를 던지지 않습니다.