gpt4 book ai didi

java - scala 中的 val 与 java 中的 const 有何不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:49 25 4
gpt4 key购买 nike

有人愿意详细说明 scala 中的 val 与 java 中的 const 有何不同吗?
技术差异是什么?我相信我了解 C++ 和 Java 中的“const”是什么。我觉得“val”在某种程度上有所不同并且在某种意义上更好,但我就是不能 Handlebars 指放在上面。谢谢

最佳答案

const in Java has no function —它是保留的,但实际上您不能将其用于任何用途。将 Java 变量声明为 final roughly equivalent .

在 Scala 中将变量声明为 val 与 Java final 有类似的保证——但 Scala val 实际上是方法,除非它们是声明为 private[this]。这是一个例子:

class Test(val x: Int, private[this] val y: Int) {
def z = y
}

这是编译后的类文件的样子:

$ javap -p Test
Compiled from "Test.scala"
public class Test {
private final int x;
private final int y;
public int x();
public int z();
public Test(int, int);
}

所以从这个例子中可以清楚地看出 private[this] val 实际上是 Scala 中 Java 的 final 的等价物,因为它只是创建一个字段(没有 getter 方法)。然而,这是一个私有(private)领域,所以即使这样也不完全相同。

另一个有趣的事实:Scala 也有一个 final 关键字! Scala 的 final 的行为与 final 的工作方式类似对于 Java 中的——即它可以防止覆盖。这是另一个例子:

final class Test(final val x: Int, final var y: Int) { }

以及生成的类:

$ javap -p Test
Compiled from "Test.scala"
public final class Test {
private final int x;
private int y;
public final int x();
public final int y();
public final void y_$eq(int);
public Test(int, int);
}

请注意,final var 定义使 getter 和 setter 方法成为 final方法(即您不能覆盖它们),而不是支持变量本身。

关于java - scala 中的 val 与 java 中的 const 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25417450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com