scala:scala方法中ClassTag的替代方法

时间:2016-04-29 19:34:52

标签: java scala reflection

我在scala中有一个简单的方法,它需要运行时参数的类型信息,因此我使用ClassTag,但我希望我的方法可以与java互操作。但是ClassTag不是java友好的。那么有一种解决方法可以使它与Java一起使用吗?

我希望getElement方法可以与java互操作。

def getElements: Array[SomeType] = ...

def getElement[T <: SomeType : ClassTag](i: Int): T = {
  getElements(i) match {
    case element: T => element
    case element => throw new IllegalArgumentException()
  }
}

1 个答案:

答案 0 :(得分:0)

您必须详细了解您希望在方法中执行的操作。创建数组?如果你真的需要,你可以使用

def myMethod[T](x: T): Unit = {
  implicit val classTag = ClassTag[T](x.getClass)
}

但当然如果x为null则会失败,如果x是基本类型,则会导致装箱。