加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

无法将具有专门化特征的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读