使用无形在scala中获取参数化类的名称

问题描述 投票:1回答:1

我想获取使用无形状的作为参数传递给函数的类的名称。我已经试过了:

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

如果将T替换为具体类型,则没有问题。是否可以使用无形来进行类似的工作?

scala generics shapeless
1个回答
0
投票

您只需要添加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的实际类型尚不知道。)

© www.soinside.com 2019 - 2024. All rights reserved.