在Scala中使用@BeanProperty而不是定义getter / setter函数是一
在可以公开访问/修改的类中定义数据成员
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 = _ } 然后javap -private Foo显示以下内容: public class Foo { private int foo; public int foo(); public void foo_$eq(int); public Foo(); } 除非你有自定义逻辑,你需要适应你的getter或setter(在这种情况下,通常最好考虑更多的描述性方法名称),你不应该手动定义它们. scala.reflect.BeanProperty注释(或2.11上的scala.beans.BeanProperty)对foo()和foo_ $eq(int)方法的生成没有任何影响 – 编译器将为var foo生成这些:无论您是否使用注释.注释只是为这些方法添加了getFoo和setFoo别名.如果您需要这些别名,请使用注释,如果不需要,请不要使用. 总结最佳实践: >不要使用var.>如果必须使用var,则可以(并且应该)避免定义自己的getter和setter.>仅当您使用getFoo和setFoo样式方法签名实现接口时,或者您希望从Java调用代码(其中调用名为foo_ $eq的方法不方便)时,才使用BeanProperty批注. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angularjs – 为什么ng-mouseover不适用于ng-if
- scala – 为什么sbt在Play项目中报告“value enablePlugins
- unix – /dev/tty有什么特别的?
- GWT-Bootstrap3中 组件开发文档(二)
- bash排序异常的顺序.空间问题?
- Angular 2 Typescript:是否可以将接口作为参数传递给函数?
- angularjs – 保留刷新页面的页面数据
- 格式化的秒数为mm:ss在Angular 2中
- 当AngularJS中的文本框更改时,javascript – 具有延迟的调用
- angular – ng4 componentFactory将它放在DOM目标中