斯卡拉。检查类型是否可比较

时间:2014-12-30 20:21:14

标签: scala type-conversion comparable

我有一个简单的类,它采用泛型类型,例如:

class SomeClass[T: TypeTag](someVal: T) = {
  def value = someVal
  def columnType = typeOf[T]
}

我需要在运行时检查[T]是否可比较(我不想要求它具有可比性,只检查它是否可比)。如果我有[T]的实际实例(我不会这样做),我可以做以下工作正常...

def canCompareType[T](value: T): Boolean = {
  val compClass = classOf[Comparable[_]]
  compClass.isAssignableFrom(value.getClass)
}    

但我不知道如何只使用类型定义来实现这一点,而实际上并没有实现[T]的实例。我已经尝试了下面的想法,它看起来似乎合理......

def canCompareType[T]: Boolean = {
  val compClass = classOf[Comparable[_]]
  compClass.isAssignableFrom(classOf[T])
}

但是给出了编译错误......

Error: class type required but T found : compClass.isAssignableFrom(classOf[T])

我在这里找到了类似的答案,但它再次假设我有一个[T]的实例。

Cast objects to comparable type

我有什么想法可以解决这个问题。我觉得我必须非常接近。

更新 我还需要能够检查值类型,因此我希望canCompareType[Int]也返回true,因为100.compareTo(200)有效。

由于

1 个答案:

答案 0 :(得分:3)

或许这样的事情?

def foo[T: TypeTag] = typeOf[T] match {
    case t if t <:< typeOf[Comparable[_]] => "Comparable"
    case _ => "Not Comparable"
}