Tôi tạo raGán một @Annotation enum một giá trị
enum Restrictions{
none,
enumeration,
fractionDigits,
length,
maxExclusive,
maxInclusive,
maxLength,
minExclusive,
minInclusive,
minLength,
pattern,
totalDigits,
whiteSpace;
public Restrictions setValue(int value){
this.value = value;
return this;
}
public int value;
}
Vì vậy mà tôi hạnh phúc có thể làm một cái gì đó như thế này, đó là hoàn toàn cú pháp pháp lý.
Restrictions r1 =
Restrictions.maxLength.setValue(64);
Lý do là, tôi đang sử dụng enum để hạn chế các loại hạn chế mà có thể được sử dụng, và có thể gán giá trị cho hạn chế đó.
Tuy nhiên, động lực thực tế của tôi là sử dụng hạn chế đó trong @annotation.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface Presentable {
Restrictions[] restrictions() default Restrictions.none;
}
Vậy đó, tôi có ý định làm điều này:
@Presentable(restrictions=Restrictions.maxLength.setValue(64))
public String userName;
mà, trình biên dịch croaks
The value for annotation enum attribute must be an enum constant expression.
Có cách nào để đạt được những gì tôi muốn hoàn thành
Có vẻ như bạn đang phát minh lại 'javax.validation' (JSR303). Bạn đã xem xét sử dụng nó chưa? Bạn đã xem API của nó/impls cách họ đã làm nó? Ví dụ. [Hibernate implementation] (http://docs.jboss.org/hibernate/stable/validator/reference/en/html/validator-usingvalidator.html). – BalusC
Hibernate không hoạt động với GAE, phải không? –
là trình duyệt tính hợp lệ ngủ đông, không phải chính là ngủ đông. sẽ hoạt động ở mọi nơi. (bất kỳ nếu nó không, phiên bản dựa trên chú thích của bạn sẽ không phải là phiên bản dựa trên chú thích) –