访问 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.number
或 a.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);
}
我在 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.number
或 a.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);
}