我有一个简单的类,它采用泛型类型,例如:
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)
有效。
由于
答案 0 :(得分:3)
或许这样的事情?
def foo[T: TypeTag] = typeOf[T] match {
case t if t <:< typeOf[Comparable[_]] => "Comparable"
case _ => "Not Comparable"
}