Получение имени параметризованного класса в scala с использованием бесформенного - PullRequest
1 голос
/ 03 ноября 2019

Я хочу получить имя класса, переданного в качестве параметра в функцию с использованием бесформенного. Я пробовал это:

def sayMyName[T](t: T): String = Typeable[T].describe // error: class type required but T found

Если T заменить на конкретный тип, нет проблем. Можно ли сделать что-то подобное с помощью бесформенного?

1 Ответ

1 голос
/ 03 ноября 2019

Вам просто нужно добавить Typeable класс типов в качестве границы контекста вашего типа T:

def sayMyName[T: Typeable](t: T): String = Typeable[T].describe

sayMyName("") //String

Вы также можете явно объявить неявный параметр:

def sayMyName[T](t: T)(implicit typeable: Typeable[T]): String = Typeable[T].describe

Добавивпривязанный к контексту, вы просите компилятор подождать с разрешением Typeable
класса типов, пока не будет вызван sayMyName с конкретным типом, а не разрешить его сразу (что невозможно, поскольку реальный тип T еще не известенна данный момент).

...