में जेनेरिक साथी ऑब्जेक्ट सुपरटेप मेरे पास दो कक्षाएं, मार्गदर्शिका और उपयोगकर्तागुइड हैं। ग्रिड में एक प्रकार का तर्क है। UserGuid Guid का एक विशेष मामला है जो एक इकाई (उपयोगकर्ता) का प्रतिनिधित्व करता है जिसके लिए कोई कक्षा नहीं है, इसलिए मैंने इसे एक GUID [Any] के रूप में लागू किया है।स्कैला
मेरे पास गुइड के लिए कई लागू विधियां हैं जिन्हें मैं दो प्रकारों के बीच साझा करना चाहता हूं, इसलिए मैंने उन्हें एक सुपरक्लास (GuidFactory) में रखा। हालांकि, चूंकि गइड पैरामीटरकृत है, इसलिए मुझे ग्रिड फैक्ट्री विशेषता को पैरामीटर करना है, अन्यथा परिणामस्वरूप गइड को guid [_] के रूप में पैरामीटर किया जाएगा।
नतीजतन, मेरे साथी वस्तु UserGuid संकलन नहीं करता है, कि शिकायत:
error: com.wixpress.framework.scala.UserGuid takes no type parameters, expected: one object UserGuid extends GuidFactory[UserGuid]
वहाँ किसी भी तरह से मैं Guid और 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)
}
'' GuidFactory' बनाने के लिए नहीं लग रहे में apply' तरीकों 'UserGuid' के लिए भावना। जैसे 'UserGuid.apply [स्ट्रिंग] (" ") 'वापसी' क्या होनी चाहिए? 'GuidFactory' के अनुसार, इसमें 'UserGuid [स्ट्रिंग]' टाइप होगा, जो मौजूद नहीं है। –
जो वास्तव में समस्या है, मैं इसे UserGuid.apply ("1234") होना चाहता हूं, UserGuid.apply [स्ट्रिंग] ("1234") नहीं; जो समझ में आना चाहिए, चूंकि GuidFactory टाइप I का पैरामीटर लेता है, जो कि गुइड का उप-प्रकार है और इसमें एक पैरामीटर है, और UserGuid Guid का उप-प्रकार है और एक पैरामीटर को किसी भी के रूप में प्रदान करता है ... –