0

首先,我知道清单已被弃用,最好使用 TypeTag,但现在它不是我的选择,所以请考虑我的问题:

如何检查清单表示的类型是否是清单[Numberic[_]]表示的类型的子类型?

实际上,我有一个接收清单的函数,我想检查它是否为数字。

def isNumeric(m: Manifest[T]) : Boolean = m <:< manifest[Numeric[_]]

但是,它不起作用,例如对于 manifest[Double] 的输入。

任何想法,如何使它工作?

4

1 回答 1

2

Numeric是一个类型类,它与子类型和Manifest(或TypeTag)没有任何关系。

Double不是一个NumericT : Numeric在类型参数中意味着Numeric[T]在范围内有类型的隐式值。您无法通过反射检查它。

也许您可以搜索 implicit in macros,但我不确定,我认为这不是您要寻找的。

所以答案是:你不能。

即使在理论上也是不可能的:在运行时没有关于隐式值的信息,Manifest[T]在编译时也没有实例。

于 2013-08-09T12:57:53.323 回答