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

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

olarak specializable özelliği ile Scala yöntemini uzman olamaz.

Bu yönteme nasıl yardımcı olabilirim, yaniyönteminin Keyed$mcI$sp sınıfında Eq$mcI$sp olması için dönüş türünü nasıl yapabilirim?

cevap

2

Anahtarlı Eq ile uzatırsanız, özel bir eq yöntemi ile sonuçlanırsınız. Kullanım durumunuza bağlı olarak, bu sizin için işe yaramayabilir.

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 
Foo

için aşağıdaki bayt kodu üretecek
İlgili konular