<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I have gathered feedback from various places and as expected everyone has his favorite best solution.<div><br></div><div>I am on the fence to support this:</div><div>&nbsp;- @Max with long not supporting double and float</div><div>&nbsp;- @MaxDecimal with String (BigDecimal style)&nbsp;not supporting double and float</div><div>&nbsp;- same for min</div><div><br></div><div>WDTY?&nbsp;</div><div>Better names encouraged.</div><div><br></div><div><br></div><div><div>/**</div><div>&nbsp;* The annotated element must be a number whose value must be lower or</div><div>&nbsp;* equal than the specificed maximum.</div><div>&nbsp;* &lt;p/></div><div>&nbsp;* Supported types are:</div><div>&nbsp;* &lt;ul></div><div>&nbsp;* &lt;li>&lt;code>BigDecimal&lt;/code>&lt;/li></div><div>&nbsp;* &lt;li>&lt;code>BigInteger&lt;/code>&lt;/li></div><div>&nbsp;* &lt;li>&lt;code>byte&lt;/code>, &lt;code>short&lt;/code>, &lt;code>int&lt;/code>, &lt;code>long&lt;/code>&nbsp;</div><div>&nbsp;* &nbsp;<b>and their respective wrappers<span class="Apple-style-span" style="font-weight: normal; ">&lt;/li></span></b></div><div>&nbsp;* &lt;/ul></div><div>&nbsp;*&nbsp;<b>Note that double and float are not supported due to rounding errors (some providers&nbsp;</b></div><div><b>&nbsp;* might provide&nbsp;approximative support)</b></div><div>&nbsp;* &lt;p/></div><div>&nbsp;* &lt;code>null&lt;/code> elements are considered valid</div><div>&nbsp;*</div><div>&nbsp;* @author Emmanuel Bernard</div><div>&nbsp;*/</div><div>@Target({ METHOD, FIELD, ANNOTATION_TYPE })</div><div>@Retention(RUNTIME)</div><div>@Documented</div><div>public @interface Max {</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>String message() default "{validator.max}";</div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>Class&lt;?>[] groups() default { };</div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>/**</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;* @return Value the element must be lower or equal to</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;*/</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>long&nbsp;value();</div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>/**</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;* Defines several @Max annotations on the same element</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;* @see Max</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;*</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;* @author Emmanuel Bernard</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;*/</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@Target({ METHOD, FIELD, ANNOTATION_TYPE })</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@Retention(RUNTIME)</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@Documented</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@interface List {</div><div><span class="Apple-tab-span" style="white-space: pre; ">                </span>Max[] value();</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>}</div><div>}</div><div><br></div><div><br></div><div><br></div><div><div>/**</div><div>&nbsp;* The annotated element must be a number whose value must be lower or</div><div>&nbsp;* equal than the specificed maximum.</div><div>&nbsp;* &lt;p/></div><div>&nbsp;* Supported types are:</div><div>&nbsp;* &lt;ul></div><div>&nbsp;* &lt;li>&lt;code>BigDecimal&lt;/code>&lt;/li></div><div>&nbsp;* &lt;li>&lt;code>BigInteger&lt;/code>&lt;/li></div><div>&nbsp;* &lt;li>&lt;code>byte&lt;/code>, &lt;code>short&lt;/code>, &lt;code>int&lt;/code>, &lt;code>long&lt;/code>&nbsp;</div><div>&nbsp;* &nbsp;<b>and their respective wrappers<span class="Apple-style-span" style="font-weight: normal; ">&lt;/li></span></b></div><div>&nbsp;* &lt;/ul></div><div>&nbsp;*&nbsp;<b>Note that double and float are not supported due to rounding errors (some providers&nbsp;</b></div><div><b>&nbsp;* might provide&nbsp;approximative support)</b></div><div>&nbsp;* &lt;p/></div><div>&nbsp;* &lt;code>null&lt;/code> elements are considered valid</div><div>&nbsp;*</div><div>&nbsp;* @author Emmanuel Bernard</div><div>&nbsp;*/</div><div>@Target({ METHOD, FIELD, ANNOTATION_TYPE })</div><div>@Retention(RUNTIME)</div><div>@Documented</div><div>public @interface MaxDecimal {</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>String message() default "{validator.max}";</div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>Class&lt;?>[] groups() default { };</div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span><b>/**</b></div><div><b>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; * The string representation of the max value according to the BigDecimal representation</b></div><div><span class="Apple-tab-span" style="white-space: pre; "><b>        </b></span><b>&nbsp;* @return Value the element must be lower or equal to</b></div><div><span class="Apple-tab-span" style="white-space: pre; "><b>        </b></span><b>&nbsp;*/</b></div><div><span class="Apple-tab-span" style="white-space: pre; "><b>        </b></span><b>String&nbsp;value();</b></div><div><br></div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>/**</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;* Defines several @Max annotations on the same element</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;* @see Max</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;*</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;* @author Emmanuel Bernard</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>&nbsp;*/</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@Target({ METHOD, FIELD, ANNOTATION_TYPE })</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@Retention(RUNTIME)</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@Documented</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>@interface List {</div><div><span class="Apple-tab-span" style="white-space: pre; ">                </span>Max[] value();</div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>}</div><div>}</div></div></div></div></div></body></html>