繁体   English   中英

在Play Framework 2.0中使用公共字段

[英]Use of public fields in Play Framework 2.0

在Play Framework 1.x中,约定是在Java类上使用公共字段。 这样做的理由是因为Play属性增强器的工作方式如下所述: http : //www.playframework.org/documentation/1.2.4/model

简而言之,公共字段是可以的,因为Play在运行时会自动生成setter和getter。 这对我来说很有意义,还有其他一些问题可以解决。

Play Framework 2.0的工作原理大不相同。 没有“属性模拟”功能。 也许他们打算稍后再添加,但是我找不到任何建议。 没有属性模拟,使用所有公共字段的原始理由就消失了。 Play Framework 2.0示例仍使用公共字段: http : //www.playframework.org/documentation/2.0/JavaEbean

为什么仍建议在Playframework 2.0中使用公共领域? 这是否只是使用旧版本的Play开发人员创建示例的习惯,还是在Play 2.0中仍建议使用公共字段的另一个原因?

查看文档: https : //github.com/playframework/Play20/wiki/JavaEbean,Play将为我们生成缺少的访问器。

但是,它们是使用此技术的警告,最主要的是,ebean仪表无法在生成get / setter时起作用...因此可能会发生问题(事务,...)

这是相关的报价:

Play旨在自动生成getter / setter,以确保与期望它们在运行时可用的库(ORM,Databinder,JSON Binder等)兼容。 如果Play在模型中检测到任何用户编写的吸气剂/吸气剂,它将不会生成吸气剂/吸气剂以避免任何冲突。

注意事项:

(1)因为Ebean类增强是在编译后发生的,所以不要期望Ebean生成的getter / setter在编译时可用。 如果您希望直接使用它们进行编码,则可以自己明确地添加getter / setter,或者确保在项目的其余部分之前编译模型类。 将它们放在一个单独的子项目中。

(2)直接Ebean字段访问的增强(启用延迟加载)仅适用于Java类,而不适用于Scala。 因此,从Scala源文件(包括标准的Play 2模板)进行直接字段访问不会调用延迟加载,通常会导致实体字段为空(未填充)。 为了确保填充字段,请(a)手动创建getter / setter并调用它们,或者(b)在访问字段之前确保实体已完全填充。

高温超导

我猜这是因为带有公共获取程序和设置程序的私有字段只会产生线路噪音,而不会增加任何实际价值。 在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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM