gpt4 book ai didi

Scala:我可以声明一个在编译时不会生成 getter 和 setter 的公共(public)字段吗?

转载 作者:行者123 更新时间:2023-12-03 22:33:04 25 4
gpt4 key购买 nike

在 Scala 中,当您声明 val 或 var 时,Scala 会在编译为字节码时自动为您生成私有(private)字段以及 getter 和 setter。

例如。

class myClass {
val name = "My Name"
}

将编译以创建等效的
class myClass {
private string name;
public string name();
public void name_$eq(string);
}

其中 name() 和 name_$eq 是私有(private)字符串名称的 getter 和 setter。

我知道您可以通过将私有(private)字段声明为 private[this] val/var blah 来强制它不为私有(private)字段提供 getter 和 setter,但我需要能够创建一个在编译时不生成 getter 和 setter 的公共(public)字段.

这在 Scala 中是否可行?

谢谢

最佳答案

如您提供的示例中所示,生成的类不包含 getter 或 setter。生成的类不包含 java bean getter 或 setter。真正让编译器生成getXsetX var 的方法您需要使用 @BeanProperty 注释该变量.

如果您想从 java 访问公共(public)字段,我认为您很不幸。至少,我还没有看到仅使用 scala 来实现这一目标的方法。

您可以通过混合 scala 和 java 来完成它。使用如下 java 类:

public abstract class JavaClassWithPublicField {
public String name = "My name";
}

然后在您的 Scala 代码中继承该类:
class ScalaClassWithPubilcField extends JavaClassWithPublicField

这可能是最干净的方法。

关于Scala:我可以声明一个在编译时不会生成 getter 和 setter 的公共(public)字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10347384/

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