我正在使用play-framework 2.3.9 for java并且遇到play的属性增强问题:
如play documentation中所述,play使用字节码增强功能自动为公共字段创建getter和setter。此功能也应该支持编写我自己的访问器:
当然,您可以自己定义getter和setter方法。如果存在方法,Play将使用现有的访问者。
然而,我的自定义getter / setter将不会被调用!
这是带有自定义设置器的模型的播放文档中的示例:
public class Product {
public String name;
public Integer price;
public void setPrice(Integer price) {
if (price < 0) {
throw new IllegalArgumentException("Price can’t be negative!");
}
this.price = price;
}
}
在另一个课程中,我为price
- 属性设置了负值:
Product myProduct = new Product();
myProduct.price = -20;
通过正确的播放增强功能,这应该会自动调用自定义setter并抛出异常。 但不会抛出异常!
我的第一个想法是,默认情况下可能会禁用播放增强功能,因为这也是discussed latley by the play developers。所以我看了一个带有反编译器的.class文件,并注意到,只要没有自编写访问器,所有getter / setter都是创建并正确调用。所以显然启用了播放增强功能。
我发现它有点奇怪,任何高于play-1.2的版本都不存在关于此主题的游戏文档。游戏开发者是否有可能忘记维护此功能?
我创建了一个git-hub repository,其中包含我上面提到的播放文档中的确切代码示例,您可以在其中重现该错误。
我什么都遗失了? 我该怎么做,以便调用我的自定义访问器代码而不必显式调用getter / setter-methods?