【问题标题】:Use of public fields in Play Framework 2.0Play Framework 2.0 中公共字段的使用
【发布时间】:2012-03-30 02:52:14
【问题描述】:
【问题讨论】:
标签:
java
javabeans
playframework-2.0
【解决方案1】:
查看文档:https://github.com/playframework/Play20/wiki/JavaEbean,Play 将为我们生成缺少的访问器。
然而,他们对这种技术有一些警告,最重要的是 ebean 工具无法在生成 get/setter 上工作......因此可能会发生问题(事务,......)
以下是相关引述:
Play 旨在自动生成 getter/setter,以确保与期望它们在运行时可用的库(ORM、Databinder、JSON Binder 等)兼容。如果 Play 在 Model 中检测到任何用户编写的 getter/setter,它不会生成 getter/setter 以避免任何冲突。
注意事项:
(1) 因为 Ebean 类增强发生在编译之后,所以不要期望 Ebean 生成的 getter/setter 在编译时可用。如果您希望直接使用它们进行编码,请自己显式添加 getter/setter,或者确保在项目的其余部分之前编译您的模型类,例如。将它们放在一个单独的子项目中。
(2) 增强直接 Ebean 字段访问(启用延迟加载)仅适用于 Java 类,不适用于 Scala。因此,从 Scala 源文件(包括标准 Play 2 模板)直接访问字段不会调用延迟加载,通常会导致空的(未填充的)实体字段。要确保填充字段,请 (a) 手动创建 getter/setter 并改为调用它们,或者 (b) 确保在访问字段之前完全填充实体。
HTH
【解决方案2】:
我猜这是因为带有公共 getter 和 setter 的私有字段只会产生线路噪音,不会增加任何实际价值。在 Scala 中,getter 和 setter 也不可见,它们也是自动生成的。例如:
class Person(var name: String)
val a = new Person("John Smith")
a.name = "Henry Smith"
Play 受到 Rails 的启发,Ruby 也有自动生成 getter 和 setter 的语法:
class Person
attr_accessor :name
end
person = Person.new
person.name = "John Henry"