我想获取使用无形状的作为参数传递给函数的类的名称。我已经试过了:
def sayMyName[T](t: T): String = Typeable[T].describe // error: class type required but T found
如果将T
替换为具体类型,则没有问题。是否可以使用无形来进行类似的工作?
您只需要添加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的实际类型尚不知道。)