1
에 대한 해결 방법을 검색 :코 틀린 빈 데이터 클래스 기본 생성자 주어진 코 틀린 코드와
sealed class Event(val id:String= UUID.randomUUID().toString(), val timestamp:Instant = Instant.now())
data class BarEvent(val additionalInfo:String):Event()
object FooEvent:Event()
// data class CorrectFooEvent():Event() // invalid kotlin
fun main(args: Array<String>) {
val b1 = BarEvent("b1")
val f1 = FooEvent
Thread.sleep(1000)
val b2 = BarEvent("b2")
val f2 = FooEvent
println("${b1.id} ${b1.timestamp} $b1")
println("${f1.id} ${f1.timestamp} $f1")
println("${b2.id} ${b2.timestamp} $b2")
println("${f2.id} ${f2.timestamp} $f2")
}
가 BarEvent
아무 문제가 없다합니다.
그러나 FooEvent
에는 Event
에있는 매개 변수보다 더 많은 매개 변수가 없으므로 빈 생성자를 갖고 싶습니다. 데이터 클래스에 대한 권한이 없으므로 객체로 만들었습니다. 그러나 객체는 싱글 톤이므로 instanciated 이벤트로 동작하지 않습니다.
(A data class
으로 클래스를 유지) 내가 볼 수있는 유일한 해결 방법은 같은 것입니다 :
sealed class Event(open val id:String= UUID.randomUUID().toString(), open val timestamp:Instant = Instant.now())
data class FooEvent(override val id:String= UUID.randomUUID().toString(), override val timestamp:Instant = Instant.now()):Event()
그러나 그것은 매우 우아 아니다.
고마워요.하지만 "데이터 클래스"의 복사 및 소멸 기능을 잃어버린 것입니다. 그래서 나는 "클래스를 데이터 클래스로 유지"라고 말했다. –
그들의 결정은 1.0 시간에 의미가있는 것처럼 보입니다. 파괴되지 않으며 데이터 클래스의 상속도 없습니다. 그러나 지금, it'a는 별난. .. 어떻게라도 고마워한다. –
편집하기 전에 답이 옳았습니다. 이 경우 데이터 클래스를 사용하지 않아야합니다. 데이터 클래스 문서에서 상속 된 필드는 데이터 클래스 기능에 포함되지 않습니다. "컴파일러는 기본 생성자 * :"에 선언 된 모든 속성에서 다음 멤버를 자동으로 파생시킵니다. (그것을 지적 해 주신 kotlinglang slack 커뮤니티에 감사드립니다) –