2017-11-06 2 views
0

나는 경우 클래스가 있습니다.스칼라 특성 구현

내 초기 구현이 사용 사례 처리하기 :

case class EvaluateAddress(addressFormat: String, 
          screeningAddressType: String, 
          addressId: Option[String], 
          addressValue: Option[MailingAddress]) { 

    @JsonProperty("value") 
    def setAddressId(addressId: String): Unit = { 
    val this.`addressId` = Option(addressId) 
    } 

    def this(addressFormat: String, screeningAddressType: String, addressId: String) = { 
    this(addressFormat, screeningAddressType, Option(addressId), None) 
    } 

    def this(addressFormat: String, screeningAddressType: String, address: MailingAddress) = { 
    this(addressFormat, screeningAddressType, None, Option(address)) 
    } 
} 

을하지만, 나는 이것이 좋은 방법입니다 생각하지 않습니다 그것은 미래의 어떤 문제를 만들 수 있습니다.

내가 수행 할 수있는 다른 방법은 무엇입니까?

편집 : ** addressFormat, screeningAddressType, value **의 세 가지 매개 변수를 포함하는 클래스를 만들 수 있고 사용 사례를 모두 처리 할 수 ​​있습니까?

답변

3

사례 클래스의 필드에 대한 기본값을 가질 수 있습니다.

그래서 당신은 None에 옵션 필드의 기본값을 가질 수

case class EvaluateAddress(addressFormat: String, 
          screeningAddressType: String, 
          addressId: Option[String] = None, 
          addressValue: Option[MailingAddress] = None) 

을 그럼 당신은 EvaluateAddress의 새 인스턴스를 만들 때, 당신은 addressId, 또는 addressValue 또는 둘 중 하나에 값을 전달하도록 선택할 수 있습니다 .. 또는 아무것도 전혀.

3

세터와 보조 구성자를 제공 할 필요가 없습니다. 케이스 클래스에서 제공하는 복사 메서드를 사용하면됩니다. 예를 들어

:

case class MailingAddress(email:String) 
case class EvaluateAddress(addressFormat: String, 
          screeningAddressType: String, 
          addressId: Option[String], 
          addressValue: Option[MailingAddress]) 

scala> val y = EvaluateAddress("abc", "abc", None, None) 
y: EvaluateAddress = EvaluateAddress(abc,abc,None,None) 

scala> y.copy(addressId = Some("addressId")) 
res0: EvaluateAddress = EvaluateAddress(abc,abc,Some(addressId),None) 
관련 문제