5
tip parametrelerine uymuyor Türlerle ilgili bazı sorunlar yaşıyorum. Bu durumda temel yöntemleri olan iki özelliğim var ve bunlardan biri diğerine bağlı. Bundan sonra onlar için iki uygulama var. Burada neyin yanlış olduğu hakkında bir fikrin var mı?Traite,
derleyici söylüyor:
type arguments [ImplDefinition,ImplDto,ImplDtoIdentifier] do not conform to trait ChildOperations's type parameter bounds [C <: Types.BaseT[A,I],A <: Types.IDObj[I],I <: IIdentifier]
[error] class ImplOperations extends Parent2(new ImplDefinition) with ChildOperations[ImplDefinition, ImplDto, ImplDtoIdentifier] {
kodu:
/*
* Generic Implementation
*/
object Types {
type IDObj[I <: IIdentifier] = AnyRef {def id: I}
type BaseT[A, I <: IIdentifier] = Parent1[A] {
def id: Foo[I]
}
}
trait IIdentifier extends Any {
def id: Long
override def toString = id.toString
}
class Parent1[A](a: String)
class Foo[A](a: String)
trait ChildDefinition[A <: Types.IDObj[I], I <: IIdentifier] {
self: Parent1[A] =>
def id(a: A): Foo[I]
}
class Parent2[A](a: A)
trait ChildOperations[C <: Types.BaseT[A, I], A <: Types.IDObj[I], I <: IIdentifier] {
self: Parent2[C] =>
def get(identifier: I): Option[A]
}
/*
* Concrete Implementation
*/
case class ImplDtoIdentifier(id: Long) extends IIdentifier
case class ImplDto(id: ImplDtoIdentifier, name: String)
class ImplDefinition extends Parent1[ImplDto]("Value") with ChildDefinition[ImplDto, ImplDtoIdentifier] {
override def id(a: ImplDto): Foo[ImplDtoIdentifier] = ???
}
class ImplOperations extends Parent2(new ImplDefinition) with ChildOperations[ImplDefinition, ImplDto, ImplDtoIdentifier] {
self =>
override def get(identifier: ImplDtoIdentifier): Option[ImplDto] = ??? // here I will use the id method from ImplDefinition
}
, ben bir göz atın ve size bir ipucu vermek istedi ama don:
Types.BaseT
EğerImplDefinition
sınıf şeylere birdef id:Foo[ImplDtoIdentifier] = ???
derlemek olacak eklerseniz birdef id: Foo[I]
amaImplDefinition
sadecedef id(a: ImplDto): Foo[ImplDtoIdentifier]
sağlar sorar Burada olan her şeyi anlamaya yetecek kadar zamanımız var. 11 sınıf/özelliğiniz var ve bu ekstra türleri hariç tutuyor. Örneğinizi bir [MCVE] (http://stackoverflow.com/help/mcve) adresine indirdiyseniz, daha iyi bir yanıt verme şansınız olacaktır. – sloucBu parçacığı zaten yaptım ve kalan tüm parçaları çıkardım. Ama haklısın hala büyük. Yardımcı olup olmadığından emin değil, ancak ImplOperations sınıfını kaldırırsanız derler. Sorun, ChildOperarions türlerini doğrulamaktır. – rtfpessoa