无法将具有专门化特征的Scala方法专门用于返回类型
发布时间:2020-12-16 19:03:55 所属栏目:安全 来源:网络整理
导读:trait Eq[@specialized -X] { def eq(x: X,y: X): Boolean}trait Keyed[@specialized(Int) X] { def eqOnKey: Eq[X]} 方法eqOnKey不是专门生成的类Keyed $mcI $sp. 我如何专门化这种方法,即将类Keyed $mcI $sp中的方法eqOnKey $mcI $sp的返回类型设为Eq $mcI
trait Eq[@specialized -X] { def eq(x: X,y: X): Boolean } trait Keyed[@specialized(Int) X] { def eqOnKey: Eq[X] } 方法eqOnKey不是专门生成的类Keyed $mcI $sp. 我如何专门化这种方法,即将类Keyed $mcI $sp中的方法eqOnKey $mcI $sp的返回类型设为Eq $mcI $sp? 解决方法
如果使用Eq扩展Keyed,则最终得到一个专门的eq方法.这可能不适用于您,具体取决于您的用例.
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 } 将为Foo生成以下字节码 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |