在类中定义可以公开访问/修改的数据成员
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.BeanProperty
2.11)对生成没有任何影响foo()
and foo_$eq(int)
方法——编译器将为var foo: Int
无论您是否使用注释。注释只是添加getFoo
and setFoo
这些方法的别名。如果您需要这些别名,请使用注释,如果不需要,则不要使用。
总结最佳实践:
- 不要使用
var
.
- 如果你必须使用
var
,您可以(并且应该)避免定义自己的 getter 和 setter。
- Use the
BeanProperty
仅当您实现接口时才使用注释getFoo
and setFoo
-style 方法签名,或者如果您希望从 Java 调用代码(其中调用名称类似于foo_$eq
不方便)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)