Java类中的Scala获取器和设置器

Java类中的Scala获取器和设置器,第1张

Java类中的Scala获取器和设置器

您只能这样做,而且您可能不想这样做已经足够困难。

不能
做的是编写一个裸露的Java类,该类被神奇地解释为Scala获取器和设置器。原因是Scala将信息嵌入其getter和setter所需的类文件中(例如,是否存在零个参数块或一个空的参数块-
JVM(或Java)中没有保留这种区别)。

可以 使用Java来实现Scala定义的接口(即特征):

// GetSetA.scalatrait GetSetA { def a: Int; def a_=(a: Int): Unit }// JavaUsesGSA.javapublic class JavaUsesGSA implements GetSetA {  private int a = 0;  public int a() { return a; }  public void a_$eq(int a) { this.a = a; }}

即使如此,您 仍然无法 做的是直接使用该类(同样,因为Java并未为Scala添加适当的注释信息):

scala> j.a = 5<console>:8: error: reassignment to val       j.a = 5

但是由于它 确实 成功实现了特征,因此在将其键入为特征时可以根据需要使用它:

scala> (j: GetSetA).a = 5(j: GetSetA).a: Int = 5

所以这真是个混蛋。无论如何,它都不是完美的,但是在某些情况下,它可能足以提供帮助。

(当然,另一种选择是提供从Java类到具有getter / setter的隐式转换,该getter /
setter引用Java类上的真实方法;即使您无法从Scala继承Java,此方法也可以使用)

(编辑:当然,没有绝对的理由要求编译器 必须 采取这种方式;有人可能会认为,将Java定义的getter /
setter对解释为Scala对(即,如果类文件未明确表示它来自Scala)是一种是增强功能以​​改善Java互 *** 作性的理想选择。)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5565781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存