我看到reflect.runtime.TypeRef比reflect.runtime.Type多了三个方法,但是两者之间的主要区别是什么?为什么Type没有包含这些方法?而我该如何检索TypeRef的值?
规范类型模式匹配显示了所有不是TypeRef的内容,即在TypeRef提取器之后的所有内容。 例如,方法类型与类不同,不会以相同的方式使用类型参数。 f [Int]并不意味着“专门针对Int的f”,就像List [Int]是List [Any]的子类型一样,或者String => Int和String => Any也是如此。 因此,方法类型没有类型参数。
Type
可以转换或匹配到TypeRef
- 在反射示例中您会一遍又一遍地看到这种情况。我认为真正有趣的问题可能是“什么时候Type
不是TypeRef
?” - J CracknellList[_]
,它可以被转换为TypeRef
,但是当你尝试访问args
时会抛出异常。这实际上很像一个 bug。 - J Cracknell