在可以公开访问/修改的类中定义数据成员
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
已经导致生成吸气剂和吸气剂。例如,如果我们编译此类:
class Foo {
var foo: Int = _
}
然后javap -private Foo
显示以下内容:
public class Foo {
private int foo;
public int foo();
public void foo_$eq(int);
public Foo();
}
除非您有需要适应getter或setter的自定义逻辑(在这种情况下,考虑使用更具描述性的方法名称通常是个好主意),否则您无需手动定义它们。
在scala.reflect.BeanProperty
注释(或scala.beans.BeanProperty
2.11)不会对产生任何影响foo()
和foo_$eq(int)
方法,编译器会生成这些对var foo: Int
您是否使用注释。注释只是为这些方法添加getFoo
和setFoo
别名。如果需要这些别名,请使用批注,如果不需要,请不要使用。
总结最佳做法:
var
。var
,则可以(并且应该)避免定义自己的getter和setter。BeanProperty
仅当您正在实现带有getFoo
和setFoo
-style方法签名的接口时,或者期望从Java调用代码(使用诸如这样的名称的方法foo_$eq
很不方便)调用代码时,才使用注释。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句