[SCALA] 케이스 클래스를 선언 할 때 나는 마지막 수정을 사용해야합니까?
SCALA케이스 클래스를 선언 할 때 나는 마지막 수정을 사용해야합니까?
스칼라 - wartremover 정적 분석 도구에 따르면 내가 만드는 모든 경우 클래스의 앞에 "최종"추가해야한다 오류 메시지가 "케이스 클래스가 최종해야한다"말했다.
희생양 (스칼라의 또 다른 정적 분석 도구)에 있지 않고 내가해야 따르면 (오류 메시지 : "케이스 클래스의 중복 최종 수정")
누가 맞다, 그 이유는 무엇입니까?
해결법
-
==============================
1.그것은 그것을 사용하는 것은 변경 일을한다는 의미에서 중복되지 않습니다. 사람이 기대하는 것처럼, 당신은 최종 경우 클래스를 확장 할 수 없습니다,하지만 당신은 아닌 마지막 하나를 확장 할 수 있습니다. 왜 wartremover 최종해야하는 경우 클래스를 제안 하는가? 글쎄, 그들을 연장 정말 아주 좋은 생각이 아니다 때문이다. 이걸 고려하세요:
그것은 그것을 사용하는 것은 변경 일을한다는 의미에서 중복되지 않습니다. 사람이 기대하는 것처럼, 당신은 최종 경우 클래스를 확장 할 수 없습니다,하지만 당신은 아닌 마지막 하나를 확장 할 수 있습니다. 왜 wartremover 최종해야하는 경우 클래스를 제안 하는가? 글쎄, 그들을 연장 정말 아주 좋은 생각이 아니다 때문이다. 이걸 고려하세요:
scala> case class Foo(v:Int) defined class Foo scala> class Bar(v: Int, val x: Int) extends Foo(v) defined class Bar scala> new Bar(1, 1) == new Bar(1, 1) res25: Boolean = true scala> new Bar(1, 1) == new Bar(1, 2) res26: Boolean = true // ????
정말? 바 (1,1) (1,2) 바 같습니다? 예기치 않은 것입니다. 그러나 대기가 더있다 :
scala> new Bar(1,1) == Foo(1) res27: Boolean = true scala> class Baz(v: Int) extends Foo(v) defined class Baz scala> new Baz(1) == new Bar(1,1) res29: Boolean = true //??? scala> println (new Bar(1,1)) Foo(1) // ??? scala> new Bar(1,2).copy() res49: Foo = Foo(1) // ???
바의 사본은 형 푸있다? 이 잘 될 수 있을까?
확실히, 우리는 .equals를 재정 의하여이 문제를 해결 (및 .hashCode과로 .toString 및 .unapply 및 .copy, 또한, 아마도, .productIterator, .productArity, .productElement 등) 할 수 있습니다 바 바즈에 방법. 그러나,이 경우 클래스가 깨진 것 확장하는 모든 클래스 "상자 밖으로".
이 이유는, 당신은 더 이상 다른 경우 클래스 경우 클래스를 확장 할 수 없다, 내가 스칼라 2.11를 생각 때문에 금지하고있다. 비의 경우 클래스 경우 클래스를 확장 여전히 wartremover의 의견으로는, 적어도 허용되지만 정말 좋은 생각이 아니다.
from https://stackoverflow.com/questions/34561614/should-i-use-the-final-modifier-when-declaring-case-classes by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라에서, 왜 부분적으로 명시 적으로 인수 유형을 지정하지 않고 기능을 적용 할 수 없습니다? (0) | 2019.11.19 |
---|---|
[SCALA] scala.net 생산은 준비가? [닫은] (0) | 2019.11.19 |
[SCALA] 스칼라의 기능 처리에 OutOfMemory 오류없이 스트림 (0) | 2019.11.19 |
[SCALA] 스파크 마지막 작업 방법을 개선하는 첫 번째 199 이상 100 배 시간 소요 (0) | 2019.11.19 |
[SCALA] 왜 제로 매개 변수 방법 이외에 스칼라 필요의 매개 변수가합니까? (0) | 2019.11.19 |