2016-02-02 16 views
10
trait Eq[@specialized -X] { 
    def eq(x: X, y: X): Boolean 
} 

trait Keyed[@specialized(Int) X] { 
    def eqOnKey: Eq[X] 
} 

विधि eqOnKey उत्पन्न वर्ग Keyed$mcI$sp में विशेषज्ञता प्राप्त नहीं कर रहा है के रूप में specializable विशेषता के साथ एक स्काला विधि विशेषज्ञ नहीं कर सकते।वापसी प्रकार

मैं इस विधि को कैसे विशेषज्ञता दे सकता हूं, यानी Keyed$mcI$sp में Eq$mcI$sp के लिए विधि eqOnKey$mcI$sp की वापसी प्रकार विधि बना रहा हूं?

उत्तर

2

यदि आप ईक के साथ कीड बढ़ाते हैं, तो आप एक विशेष ईक विधि के साथ समाप्त होते हैं। आपके उपयोग के मामले के आधार पर यह आपके लिए काम नहीं कर सकता है।

trait Eq[@specialized -X] { 
    def eq(x: X, y: X): Boolean 
} 

trait Keyed[@specialized(Int) X] extends Eq[X] 


class Foo extends Keyed[Int] { 
    def eq(x: Int, y: Int) : Boolean = x == y 
} 

फू

public boolean eq$mcI$sp(int, int); 
    Code: 
     0: iload_1 
     1: iload_2 
     2: if_icmpne  9 
     5: iconst_1 
     6: goto   10 
     9: iconst_0 
     10: ireturn 

    public boolean eq(java.lang.Object, java.lang.Object); 
    Code: 
     0: aload_0 
     1: aload_1 
     2: invokestatic #146    // Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I 
     5: aload_2 
     6: invokestatic #146    // Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I 
     9: invokevirtual #148    // Method eq:(II)Z 
     12: ireturn 
निम्नलिखित बाईटकोड तैयार करेगा
संबंधित मुद्दे