2016-04-19 5 views
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 
} 
+0

, ben bir göz atın ve size bir ipucu vermek istedi ama don: Types.BaseT Eğer ImplDefinition sınıf şeylere bir def id:Foo[ImplDtoIdentifier] = ??? derlemek olacak eklerseniz bir def id: Foo[I] ama ImplDefinition sadece def 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. – slouc

+0

Bu 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

cevap

4

sorun ImplDefinition içinde id def imzası gibi görünüyor. 'Şahsen

class ImplDefinition extends Parent1[ImplDto]("Value") with ChildDefinition[ImplDto, ImplDtoIdentifier] { 
    def id:Foo[ImplDtoIdentifier] = ??? 
    override def id(a: ImplDto): Foo[ImplDtoIdentifier] = ??? 
}