如何解决在Java中访问Scala类字段
我已经在Scala中定义了类A
:
class A(var number: Int)
但是当我尝试在Java中访问其成员字段number
时,出现错误:
A a = new A();
a.number = 4;
结果为:java: number has private access in A
。
如果我尝试从Scala访问number
,就没有问题。
该如何解决该问题?
解决方法
使用吸气剂
a.number();
和二传手
a.number_$eq(4);
代替字段a.number
。
或
a.getNumber();
a.setNumber(4);
如果您注释该字段
import scala.beans.BeanProperty
class A(@BeanProperty var number: Int)
如果我尝试从Scala访问
number
,就没有问题。
在Scala中,当您编写a.number
或a.number = 4
时,实际上是调用getter / setter(这是语法糖)。
编译A.scala
时,您可以查看生成的类文件,该文件可以从Dmytro的答案中解释getter number()
和setter方法number_$eq
// 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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。