Scala与Java的静态块等效吗?
伴随对象的构造函数(即主体)中的代码与Java类的静态初始化程序块中的代码 不 完全相同。在下面的示例中,我创建了A的实例,但是没有发生初始化。
scala> object Test { class A; object A { println("A.init") }}
defined module Test
scala> new Test.A
res3: Test.A = Test$A@3b48a8e6
scala> Test.A
A.init
res4: Test.A.type = Test$A$@6e453dd5
要在创建类的第一个实例时触发伴随对象的构造,可以从类构造函数中访问它。
scala> object Test { class A { A }; object A { println("A.init") }}
defined module Test
scala> new Test.A
A.init
res5: Test.A = Test$A@4e94a28e
scala> new Test.A
res6: Test.A = Test$A@30227d4e
在许多情况下,差异并不重要。但是,如果您要发射导弹(或其他副作用),您可能会在意!
问题内容: 我有一个带有一些静态成员的类,并且我想运行一些代码来初始化它们(假设此代码无法转换成简单的表达式)。在Java中,我只会 除非我弄错了,否则C ++不允许使用此类静态代码块,对吗?我应该怎么做呢? 我想要以下两个选项的解决方案: 初始化在进程加载时发生(或在加载带有此类的DLL时)。 初始化发生在第一次实例化该类时。 对于第二种选择,我在想: 但这是不可能的,因为C ++(目前?)不允
问题内容: 就像在Java 8中(某种程度上)等同于Scala的类型一样,是否也等同于Scala的类型? 问题答案: Java 8 没有类型,因此您需要自己创建一个或使用一些第三方库。 您可以使用新类型来构建这样的功能(但请阅读此答案的结尾): 用例示例: 回顾起来,基于基础的解决方案更像是一个学术实例,而不是推荐的方法。一个问题是对“空” 的处理,这与“任一个”的含义相矛盾。 以下代码显示了一个
问题内容: 在Java中: 在Scala中,我如何创建一个has ,并且可以通过以下方式访问它:? 问题答案: 您可以创建一个伴随对象(使其等同于静态对象),并使用final val关键字在其中定义变量(使其等同于最终常量): 这里还有很多
问题内容: 在我日常使用Java进行的工作中,我为流畅的接口使用了大量构建器,例如: 使用快捷方法Java,每个方法调用都会更改构建器实例并返回。一成不变的是,它涉及更多的类型输入,在修改之前先克隆构建器。构建方法最终会在构建器状态上进行繁重的工作。 在Scala中实现相同目标的一种好方法是什么? 如果我想,以确保被称为只有一次,随后只和可称为,一拉定向建设者,我怎么会去接近这个? 问题答案: S
问题内容: 考虑以下 代码 : 我们知道,首先将执行 静态 块,然后执行 空 块。但是问题是,我从未能够理解 空 块的真正用途。任何人都可以展示一个真实的例子,其中- 无论 静态 和 空 正在使用的块 无论 静态 和 空 块具有不同的事业 问题答案: 它们用于两个非常不同的目的: 静态初始化程序块将在加载类时被调用,并且将无法访问实例变量或方法。根据@Prahalad Deshpande的评论,它
问题内容: 在Scala中,我们可以编写 编译器如何实现?我可以从Java 拨打电话,但从Java发出错误 JVM是否本地支持单例? Java中是否可能有没有构造函数的类? 注意:这是代码输出 问题答案: 对单例的支持 不在语言级别上,但是该语言提供了足够的功能来创建它们而没有任何麻烦。 考虑以下代码: 这是来自Wikipedia的示例,该示例说明了如何制作单例。实例保存在私有字段中,在类外部无法