반응형
생성자 vals를 지속적으로 복제하지 않고 스칼라 케이스 클래스를 확장합니까?
계속해서 새로운 값을 선택하지 않고 케이스 클래스를 확장하는 방법이 있습니까? 예를 들어 이것은 작동하지 않습니다
case class Edge(a:Strl, b:Strl)
case class EdgeQA(a:Strl, b:Strl, right:Int, asked:Int ) extends Edge(a,b)
"a"는 "a"와 충돌하므로 이름을 a1로 변경해야합니다. 그러나 "a"의 모든 종류의 추가 공개 사본을 원하지 않으므로 비공개로 설정했습니다.
case class Edge(a:Strl, b:Strl)
case class EdgeQA(private val a1:Strl, private val b1:Strl, right:Int, asked:Int ) extends Edge(a,b)
이건 깨끗하지 않은 것 같네요 .. 뭔가 빠졌나요?
이전 댓글 작성자가 언급했듯이 케이스 클래스 확장은 피해야하지만 Edge 클래스를 특성으로 변환 할 수 있습니다.
private 문을 피하려면 변수를 재정의로 표시 할 수도 있습니다.
trait Edge{
def a:Strl
def b:Strl
}
case class EdgeQA(override val a:Strl, override val b:Strl, right:Int, asked:Int ) extends Edge
특성 def
보다 선호하는 것을 잊지 마십시오val
이 솔루션은 이전 솔루션에 비해 몇 가지 장점을 제공합니다.
trait BaseEdge {
def a: Strl
def b: Strl
}
case class Edge(a:Strl, b:Strl) extends BaseEdge
case class EdgeQA(a:Strl, b:Strl, right:Int, asked:Int ) extends BaseEdge
이런 식으로:
- 중복
val
s 가 없습니다. - 2 개의 케이스 클래스가 있습니다.
케이스 클래스는 서브 클래 싱을 통해 확장 할 수 없습니다. 또는 케이스 클래스의 하위 클래스는 케이스 클래스 자체가 될 수 없습니다.
반응형
'your programing' 카테고리의 다른 글
IIS 7.5에서 GZip 압축이 작동하지 않습니다. (0) | 2020.12.30 |
---|---|
Mongo ObjectID에서 생성 된 날짜를 추출하는 방법 (0) | 2020.12.29 |
Process Builder의 출력을 문자열로 리디렉션하는 방법은 무엇입니까? (0) | 2020.12.29 |
오류 SQL Server Management Studio의 잘못된 접두사 또는 접미사 문자 (0) | 2020.12.29 |
Alamofire에서 값을 반환하는 방법 (0) | 2020.12.29 |