繁体   English   中英

Java注释公共/私有范围

[英]Java Annotations public/private scope

在以下文档中,详细介绍了2009年有关注释验证的研究,内容如下:

http://www.ii.uib.no/~federico/latex/annotationlimitations2.pdf

让我们指出,在实践中,可以像在[3]中那样直接注释对象的字段:

 @IntRange(min=1,max=100000) private int Amount; 

但是,我们决定不提供这种可能性的原因很简单:如果字段是私有的,则框架必须首先通过反思将其可见性更改为公共,然后才能获取其价值。 我们认为允许外部框架篡改对象属性的可见性是非常糟糕的做法。

因此,他们没有像上面的示例那样将注释放在私有变量声明上,而是将注释放在公共getter()方法上。

public class WebForm {
   private int Amount;
   ...
   @IntRange(min=1,max=100000)
   public int getAmount {
       return this.Amount;
   }
}

本文的日期为2009年,所以我想知道这是否仍然适用? 如果我使用的是遵循JSR-380和Bean Validation 2.0规范的Hibernate Validator,是否需要在getter级别声明验证批注,以避免私有变量通过Hibernate框架的反射而公开? 我在网上看到的大多数/所有示例都没有这样做-他们很乐意将注释放在私有变量声明的上方。

使用反射更改字段的可见性实际上并不会更改该字段的可见性。 它返回公共字段的副本。 不,这仍然不适用。

本文从未应用于Hibernate Validator和Bean Validation。 我们支持对私有字段的注释,并使用反射来访问字段的内容。

实际上,我们通过使字段可访问我们的代码来做到这一点。 但是,这不会更改字段本身的可见性。

暂无
暂无

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

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