Scala - супертип параметра типа - PullRequest
0 голосов
/ 28 марта 2012

Как в Scala я могу сделать что-то вроде этого:

def cast [Type] (x: _ >: Type, errMsg: String): Type = {
    if (x.isInstanceOf[Type]) {
        x.asInstanceOf[Type]
    } else {
        throw new Exception(errMsg) 
    }
}

x: _ >: Type (обозначение, которого нет в Scala), означающее "тип x - это любой супертип типа".

Ответы [ 2 ]

4 голосов
/ 28 марта 2012

Если x может иметь любой супертип Type, то, конечно, это может быть Any. Это вовсе не ограничение, вы можете просто написать x : Any

В другой строке, из-за стирания типа, вы x.isInstanceOf[Type] не сделаете никакой полезной проверки. Вы не можете проверить параметр типа. (Вы должны убедиться, что информация о типе будет доступна во время выполнения. Вы можете получить что-то с помощью Manifest).

2 голосов
/ 28 марта 2012

Попробуйте это:

def cast[T >: Type](x: T, errMsg: String): T = { ... }

Однако вы можете пересмотреть необходимость явных типов в Scala.

...