Comecei escrevendo um POJO simples para configurar algumas validações de @Range, quando notei a repetição. Esta anotação recebe dois parametros min e max, ficando assim:
class User {
@Range(min=6, max=20)
private String password;
...
}
Mas, obviamente este é o mais simples dos simplérrimos exemplos onde quero demonstrar apenas o uso da anotação e porque herança seria algo útil. Em muitos outros atributos, inclusive de outras classes, gostaria de aplicar o mesmo @Range e atualmente a única solução é copiando/colando a definição.
E se eu pudesse fazer isso:
public @interface Range6to20 extends @Range(min=6, max=20) {}
Não seria ótimo? Bastaria um @Range6to20 nos atributos que quero, e tenho apenas um ponto para alterar o range, caso seja necessário futuramente. (Ok, o nome da classe iria ficar em desacordo com os valores, mas e daí? é um exemplo!... e também, o refactor do Eclipse renomeia as referencias... então... não é um problema).
Quem já viu as anotações do Struts 2 para o Validator? Ficam enormes não é? E se você pudesse estender e colocar separadamente a configuração numa anotação especializada, e de quebra ainda poder reutilizá-la em outros lugares? :D Seria ótimo, não?
Pesquisei na web algo sobre herança de anotações, mas o máximo que encontrei foi alguém comentando que também gostaria de ter, e que soube que o assunto foi discutido pelo Expert Group da respectiva JSR, só não soube dizer porque essa funcionalidade não foi incorporada. Talvez alguém saiba?
O que vocês acham? :)
[]'s!!
miojo
3 comentários:
@Scope(IOCConstants.PERTHREAD_SCOPE)
public class ...
Se o seu objetivo é apenas DRY, o uso de constantes resolve. []s
Hum, verdade, até que herança para anotações não seria má ideia. Mas, enquanto isso ainda não existe, isso não resolve o teu problema?
Oi Bruno.
Ate onde eu li, o time da especificacao decidiu nao colocar herança e nem multiplas anotacoes por causa de dar complexidade a uma feature nova na linguagem... Nao concordo muito, mas foi o que li
Postar um comentário