엔티티 필드로 Kotlin 인라인 클래스가있는 룸 데이터베이스


9

나는 방 (얻기 위해 노력하고 https://developer.android.com/topic/libraries/architecture/room 에 설명 된대로 코 틀린의 인라인 클래스와 함께) 작업을 제이크 Whartons 문서 인라인 클래스 큰 데이터베이스 ID를 확인합니다 :

@Entity
data class MyEntity(
    @PrimaryKey val id: ID,
    val title: String
)

inline class ID(val value: String)

이 방을 편집 할 때

엔티티와 Pojo에는 사용 가능한 공용 생성자가 있어야합니다. 빈 생성자 또는 매개 변수가 필드와 이름 (유형 및 유형)과 일치하는 생성자가있을 수 있습니다.

생성 된 Java 코드를 살펴보면 다음과 같습니다.

private MyEntity(String id, String title) {
      this.id = id;
      this.title = title;
}

// $FF: synthetic method
public MyEntity(String id, String title, DefaultConstructorMarker $constructor_marker) {
      this(id, title);
}

의문의 여지없이 기본 생성자는 이제 비공개입니다.

(또는 a ) String의 유형으로 사용 하면 생성 된 Java 클래스 생성자가 예상 한 것처럼 보입니다.idtypealias

public MyEntity(@NotNull String id, @NotNull String title) {
  Intrinsics.checkParameterIsNotNull(id, "id");
  Intrinsics.checkParameterIsNotNull(title, "title");
  super();
  this.id = id;
  this.title = title;
}

이제 인라인 클래스를 데이터 엔터티 속성으로 사용하는 동안 기본 생성자를 공개로 유지하는 방법이 있습니까?


일부 이슈 트래커에서 이에 대한 이슈가 발생 했습니까? 나는이 필요가 있는지에 대해 명확히 할 것 같아요
K.Os

답변:


0

이유는 ID 클래스가 런타임에서 문자열로 표시되기 때문이라고 생각합니다. 따라서 $ constructor_marker 추가 매개 변수는 MyEntity (String id, String title) 생성자 서명의 고유성을 보장하는 것이므로이 생성자가 이미 정의되었을 수 있습니다. 그러나 나는 여기서 추측하고 있습니다.

MyEntity 클래스 에서이 생성자를 명시 적으로 정의하고 작동하는지 확인할 수 있습니까?


이 생성자는 이미data class MyEntity(@PrimaryKey val id: ID, val title: String)
whlk

(ID, String) 매개 변수로 생성자를 정의했습니다. (String, String)으로 생성자를 의미했습니다. 시도했지만 불가능한 것 같습니다. "플랫폼 선언 충돌"오류가 발생했습니다.
Diego Marin 21
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.