这是我的合理化:
classOf [T]
classOf定义
Predef为具有此签名的函数:
def classOf[T]: Class[T]
尽管它是由编译器实现的,但可以使用函数语法 而不必在 语法 上创建任何特殊处理 。因此,这是考虑此选项的原因之一。
这样的替代方案
String.class暗示每个类都有一个带有字段的伴随对象
class。因此,存在两个问题:
class
是一个关键字,因此会导致语法需要特殊情况的问题- 如果只创建一个
class A
没有 伴随对象的对象,那么引用它会很奇怪,A.class
就像访问伴随对象上的 class 字段一样A
。
一种:
关于为什么
typeOf[A]可能会造成混淆。它看起来像一个函数调用,但是类型与函数结果不在同一个世界中(函数结果具有类型,但是类型本身仅在编译时有意义)。我可以将类型归因于变量:
scala> val a: A.type = Aa: A.type = A$@c21a68
我不能分配一个函数返回的类型:
scala> val b = A.type<console>:1: error: identifier expected but 'type' found. val b = A.type ^
另一方面,类型可以是对象的成员:
scala> object A { type type1 = Int }defined module Ascala> val x: A.type1 = 1x: A.type1 = 1因此,
A.type引用对象的类型并不是一件大事
A。请注意,
.type仅用于指代单例对象的类型,因此它并不是那么频繁。



