在 Scala 中使用 @BeanProperty 而不是定义 getter/setter 函数是一个好习惯吗?

2024-03-06

在类中定义可以公开访问/修改的数据成员

var _foo: Int = _
def foo_(foo: Int) = _foo = foo    // setter function
def foo = _foo                     // getter function

使用注释转换它是一个好习惯吗@BeanProperty?

import scala.reflect.BeanProperty
@BeanProperty var foo: Int = _

何时使用此注释,何时不使用?


您的第一个示例中有一些冗余,因为定义了var已经导致了 getter 和 setter 的生成。例如,如果我们编译这个类:

class Foo {
  var foo: Int = _
}

Then javap -private Foo显示以下内容:

public class Foo {
  private int foo;
  public int foo();
  public void foo_$eq(int);
  public Foo();
}

除非您有需要适合 getter 或 setter 的自定义逻辑(在这种情况下,无论如何,考虑更具描述性的方法名称通常是一个好主意),否则您不需要手动定义它们。

The scala.reflect.BeanProperty注释(或scala.beans.BeanProperty2.11)对生成没有任何影响foo() and foo_$eq(int)方法——编译器将为var foo: Int无论您是否使用注释。注释只是添加getFoo and setFoo这些方法的别名。如果您需要这些别名,请使用注释,如果不需要,则不要使用。

总结最佳实践:

  1. 不要使用var.
  2. 如果你必须使用var,您可以(并且应该)避免定义自己的 getter 和 setter。
  3. Use the BeanProperty仅当您实现接口时才使用注释getFoo and setFoo-style 方法签名,或者如果您希望从 Java 调用代码(其中调用名称类似于foo_$eq不方便)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Scala 中使用 @BeanProperty 而不是定义 getter/setter 函数是一个好习惯吗? 的相关文章

随机推荐