У меня есть простой класс, который принимает общий тип, например:Scala. Проверка, если тип является Сопоставимым
class SomeClass[T: TypeTag](someVal: T) = {
def value = someVal
def columnType = typeOf[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
Любые идеи, как я могу решить это. У меня такое чувство, что я должен быть довольно близко.
Update мне нужно, чтобы быть в состоянии проверить также на типы значений, поэтому я хотел бы canCompareType[Int]
также возвращает истину, как 100.compareTo(200)
действует.
Thanks
К сожалению, это не относится к типам значений. Например, 'foo [Int]' будет возвращать false, тогда как сравнение поддерживается в экземпляре Int (или, по крайней мере, знает, как его сравнивать и разрешать внутри) – Moog
Ну, примитивные типы не являются «сравнимыми», так что это понятно. Если вы хотите, чтобы он возвращал значение true для 'Comparable' * или * примитивного типа, тогда добавьте еще одно предложение case, где защита будет' if t <:
Dima
Это именно то, что мне нужно. Работает отлично. Благодаря! – Moog