访问 java 中的 Scala class 字段

Access scala class fields in java

我在 Scala 中定义了 class A:

class A(var number: Int)

但是当我尝试访问它在java中的成员字段number时,我得到一个错误:

A a = new A();
a.number = 4;

结果:java: number has private access in A。 如果我尝试从 scala 访问 number,没有问题。

我该怎么做才能解决这个问题?

使用getter

a.number();

和setter

a.number_$eq(4);

而不是字段本身 a.number

a.getNumber();
a.setNumber(4);

如果您对该字段进行注释

import scala.beans.BeanProperty

class A(@BeanProperty var number: Int)

If I try to access the number from scala, there is no problem.

在 Scala 中,当您编写 a.numbera.number = 4 时,您实际上调用的是 getter/setter(这是语法糖)。

编译时可以查看生成的class文件A.scala,可以解释getternumber()和setter方法number_$eq 来自 Dmytro 的回答

// A.scala
class A(var number: Int)
> scalac A.scala
> javap -p A.class
// output of above step

public class A {
  private int number;
  public int number();
  public void number_$eq(int);
  public A(int);
}