두 가지 클래스 인 Guid 및 UserGuid가 있습니다. Guid에는 한 가지 형식 인수가 있습니다. UserGuid는 클래스가없는 엔티티 (User)를 나타내는 Guid의 특별한 경우이므로 Guid [Any]로 구현했습니다.스칼라의 일반 컴패니언 개체 수퍼 유형
Guid에는 두 가지 유형간에 공유하고 싶은 몇 가지 적용 메소드가 있으므로이를 수퍼 클래스 (GuidFactory)에 넣습니다. 그러나 Guid 매개 변수가 있기 때문에 GuidFactory 특성을 매개 변수화해야합니다. 그렇지 않으면 결과 Guid가 Guid [_]로 매개 변수화됩니다. 나는이 가이 드 및 UserGuid 또는 내가 그들을 복제하거나 캐스팅을 사용해야합니다 사이의 방법을 적용 공유 할 수있는 방법이 있나요
error: com.wixpress.framework.scala.UserGuid takes no type parameters, expected: one object UserGuid extends GuidFactory[UserGuid]
: 결과
, 내 동반자 객체 UserGuid는 불평, 컴파일되지 않습니다?코드는 다음과 같습니다.
abstract class TypeSafeId[I, T](val id: I) extends Serializable
class Guid[T](override val id: String) extends TypeSafeId[String, T](id)
class UserGuid(override val id: String) extends Guid[Any](id)
trait GuidFactory[I[A] <: Guid[A]] {
def apply[T](id: String): I[T]
def apply[T](id: UUID): I[T] = apply(id.toString)
def apply[T](ms: Long, ls: Long): I[T] = apply(new UUID(ms, ls))
def apply[T](bytes: Array[Byte]):I[T] = apply(UUID.nameUUIDFromBytes(bytes))
def random[T] = apply[T](UUID.randomUUID())
}
object Guid extends GuidFactory[Guid] {
override def apply[T](id: String) = new Guid[T](id)
}
object UserGuid extends GuidFactory[UserGuid] {
override def apply(id: String) = new UserGuid(id)
}
은'apply' 방법 'UserGuid'에 대한 감각. 예 : 'UserGuid.apply [String] ("")'리턴해야 할 것은 무엇입니까? 'GuidFactory'에 따르면'UserGuid [String]'유형은 존재하지 않습니다. 정확히 문제가있는 –
입니다. UserGuid.apply ("1234")가 아닌 UserGuid.apply ("1234")가되고 싶습니다. GuidFactory는 Guid의 하위 유형이며 하나의 매개 변수를 갖는 I 유형의 매개 변수를 취하고 UserGuid는 Guid의 부속 유형이며 Any 매개 변수로 Any 매개 변수를 제공하므로 이해가 필요합니다. UserGuid가 있어야하므로 Any ... –