从语言设计的角度来看,我想知道为什么Scala删除了Java的类文字(例如String.class
)并替换为classOf[String]
,但是又添加了带有其Singletons
like Singleton.type
而不是like之类的“类型文字” typeOf[Singleton]
?
这是我的合理化:
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 = A
a: 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 A
scala> val x: A.type1 = 1
x: A.type1 = 1
因此,A.type
引用对象的类型并不是一件大事A
。请注意,.type
仅用于指代单例对象的类型,因此它并不是那么频繁。
问题内容: 是什么使类型不同于类,反之亦然? (与一般语言无关) 问题答案: 以下答案来自Gof书(“设计模式”) 对象的类定义了对象的实现方式。该类定义了对象的内部状态及其操作的实现。 相反,对象的 类型仅引用其接口-可以响应的一组请求。 一个对象可以具有许多类型,而不同类的对象可以具有相同的类型。 max函数需要一个类型为operation>且具有其自身类型的类型作为其接口之一,满足上述要求的
Haskell是一种函数式语言,它是严格类型的,这意味着整个应用程序中使用的数据类型在编译时将为编译器所知。 内置类型类 在Haskell中,每个语句都被视为一个数学表达式,该表达式的类别被称为Type 。 您可以说“Type”是编译时使用的表达式的数据类型。 要了解有关Type更多信息,我们将使用“:t”命令。 通常, Type可以被视为一个值,而Type Class可以被认为是一组类似的类型。
所以我有两个方法,一个在超类中,另一个在子类中,具有相同的名称和参数,比如public void method()。子类中还有另一个方法method1(),如下所示: 上面的代码在执行时按计划进行(方法1使用超类中的方法),但如果我将其更改为这样: 其中class是超类的名称,出于某种原因,它不使用超类方法,而是使用同名子类的方法。超不是和((类)this)一样吗?为什么会发生这种情况? 编辑:这
问题内容: 假设我们有一个类名Home。是什么区别 Home.this 和 Home.class ?他们指的是什么? 问题答案: 这个 引用该类的当前实例。 此表达式的正式术语似乎是qualified this,如Java语言规范的15.8.4节所引用。 在一个简单的类中,说和将等效。此表达式仅在存在内部类且需要引用封闭类的情况下使用。 例如: 家庭类 将类的表示形式作为对象返回。 此表达式的正式
我运行了一个用Java编写的Spark流媒体程序来读取Kafka的数据,但是我遇到了这个错误,我试图找出可能是因为我使用scala或Java的版本太低。我使用了JDK版本15,但仍然出现了这个错误,有人能帮我解决这个错误吗?非常感谢。 这是我运行项目时的终端: 这是项目的文件pom.xml: 这是项目的文件主体:
我被泛型子类型搞糊涂了。 在Java中,如果类型是的子类型,则泛型类型和是不变的。例如,不是的子类型。 但是,在Scala中,如果类型是的子类型,则泛型类型和是协变的。那么Scala中泛型类的属性是什么而Java中没有呢?