Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 播放框架的属性Senhancer:不会调用自定义getter/setter_Java_Properties_Playframework_Getter Setter_Playframework 2.3 - Fatal编程技术网

Java 播放框架的属性Senhancer:不会调用自定义getter/setter

Java 播放框架的属性Senhancer:不会调用自定义getter/setter,java,properties,playframework,getter-setter,playframework-2.3,Java,Properties,Playframework,Getter Setter,Playframework 2.3,我正在使用play framework 2.3.9 for java,对play的属性增强有一个问题: 如中所述,该剧使用字节码增强功能为公共字段自动创建getter和setter。此功能还应支持编写我自己的访问器: 当然,您可以自己定义getter和setter方法。如果存在方法,则Play将使用现有的访问器 但是,不会调用我的自定义getter/setter 这是带有自定义setter的模型播放文档中的一个示例: public class Product { public Stri

我正在使用play framework 2.3.9 for java,对play的属性增强有一个问题:

如中所述,该剧使用字节码增强功能为公共字段自动创建getter和setter。此功能还应支持编写我自己的访问器:

当然,您可以自己定义getter和setter方法。如果存在方法,则Play将使用现有的访问器

但是,不会调用我的自定义getter/setter

这是带有自定义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;
    }
}
通过正确的播放增强,这将自动调用自定义setter,并引发异常。但是没有抛出异常

我的第一个想法是,可能默认情况下禁用了播放增强功能,因为这也是。因此,我使用反编译器查看了.class文件,并注意到,只要不存在自写访问器,所有getter/setter都是正确创建和调用的。很明显,播放增强功能已经启用

我觉得有点奇怪,play关于这个主题的文档并不存在于任何高于play-1.2的版本中。游戏开发者是否可能忘记维护这个功能

我已经创建了一个包含我上面提到的播放文档中的确切代码示例的程序包,您可以在其中复制错误

我有什么遗漏吗?
我必须做什么,以便调用我的自定义访问器代码而不必显式调用getter/setter方法?

您的链接是播放1.2文档。第2场与第1场大不相同。@Ryan:正如我所说的,我找不到任何关于该主题的更高版本的文档!是吗?我查看了play的源代码,发现增强器只会替换代码来使用字段的setter,如果字段有注释@PropertiesEnhancer.GeneratedSetAccessor。当我将此注释添加到字段时,一切都按预期进行。我已在分支解决方案的存储库中提交了此修复。我猜这一定是一个bug在起作用?试试myProduct.setPrice-20;文件是。有关于财产生成的具体讨论。
Product myProduct = new Product();
myProduct.price = -20;