java long scala_Scala:如何模式匹配scala.Long和java.lang.Long

原因是java.lang.Long和Long是不同的类.在Java中,java.lang.Long.class和Long.TYPE之间存在差异.同样,在Scala中,classOf [Long]和classOf [java.lang.Long]是不同的.

如果要对类进行模式匹配,可以为此创建帮助器unapply方法:

object ScalaLong {

// Internal helper:

private def matchClass[T](c: Class[_], as: Class[T]): Option[Class[T]] =

if (as.isAssignableFrom(c)) Some(as)

else None;

// Matches wrapped Long classes.

object LongObject {

def unapply(c: Class[_]): Option[Class[java.lang.Long]] =

matchClass(c, classOf[java.lang.Long]);

}

// Matches primitive long classes.

object LongPrim {

def unapply(c: Class[_]): Option[Class[Long]] =

matchClass(c, classOf[Long]);

}

// -- Test:

def check(clz: Class[_]) =

clz match {

case LongPrim(c) => println("Long primitive: " + c);

case LongObject(c) => println("Long object: " + c);

case _ => println("Other: " + clz);

}

class Example {

val l1: scala.Long = 1L;

val l2: java.lang.Long = 1L;

val l3: java.lang.Integer = 1;

}

def main(argv: Array[String]) {

for(name

check(classOf[Example].getMethod(name).getReturnType());

}

}

通常,您必须分别处理classOf [Long]和classOf [java.lang.Long].也许,如果你描述了你需要做什么,我们可以为你的具体任务找到更好的解决方案.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值