Scala 斯卡拉。检查类型是否具有可比性

Scala 斯卡拉。检查类型是否具有可比性,scala,type-conversion,comparable,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 c

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

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]的实例可用

有没有办法解决这个问题。我有一种感觉,我一定离得很近

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


谢谢

也许是这样的吧

def foo[T: TypeTag] = typeOf[T] match {
    case t if t <:< typeOf[Comparable[_]] => "Comparable"
    case _ => "Not Comparable"
}
def foo[T:TypeTag]=typeOf[T]匹配{
案例t如果t“可比”
案例=>“不可比较”
}

不幸的是,这不适用于值类型。例如,
foo[Int]
将返回false,而compare在Int的实例上受支持(或者至少知道如何在内部进行比较和解析)。那么,原语类型是不可比较的,所以这是可以理解的。如果希望它为
Comparable
或原语类型返回true,则添加另一个
case
子句,如果t