É possivel forcar que uma classe tenha uma Annotation?

5 respostas
Paulo_Dias

Boa tarde pessoal,

alguém sabe se é possivel forcar uma annotation?

exemplo tenho uma interface e quero que quem cire uma implementação dela tenha que colocar uma anotação.

5 Respostas

E

Não - esse tipo de coisas (uma classe, método ou interface que não tem uma anotação “requerida”) só dá para detectar em tempo de execução ou então quando você for interpretar a anotação (via reflection, por exemplo).

rmendes08

Antes de partir para esse tipo de solução, avalie se você não está colocando lógica de aplicação nas suas anotações. Se for o caso, retire essa lógica das anotações e deixe essa lógica explícita no contrato de sua interface.

Anotações são um recurso poderoso quando você precisa de metadados, mas se você as utiliza para implementar a lógica da sua aplicação, você acaba adicionando complexidade desnecessária à sua aplicação.

Paulo_Dias

Obrigado pela ajuda,

vou explicar o que preciso fazer, derrepente vocês tem uma idéia que possa me ajudar…

precisor criar um framework que dada uma classe( Bean ) possa fazer as operacoes de banco sem precisar tocar em sql //trabalho da faculdade

exemplo básico

Produto p = new Produto(); // pode ser qualquer tipo de bean

Banco.delete( p );

de forma simples seria isso, uso reflexao para fazer as operacoes e preciso saber qual atributo de Produto representa a PrimaryKey por isso criei uma anotação

mas não existe nada que garanta que quem criou a classe Produto lembrou de fazer a anotaçao.

Hoje, através de reflexion eu verifico se a anotacao está presente, se não eu levanto uma exception, mas achei uma solução ruim, queria uma ideia para fazer isso de uma

forma melhor, vocês tem alguma idéia?

E

De fato isso não pode ser forçado em tempo de compilação. Continue a fazer como você fez (verificar a anotação em tempo de execução).

A propósito, você pode ter um módulo de validação, que faça uma pré-análise das suas classes, então você evita levantar o sistema completo e receber a exceção quando você for acessar a tal classe Produto. Uma forma simples de fazer essa validação é listar as classes em um arquivo de configuração (é possível, com um certo trabalho, listar as classes dentro de um Jar e fazer a validação que vocè está fazendo, mas isso fica para você procurar aqui no GUJ mesmo como é que se faz para listar as classes que estão dentro de um JAR.)

Paulo_Dias

Ok, Obrigado pessoal.

a principio vou deixar assim.

alguem tem uma idéia melhor de como realizar as operacoes ( delete …) sem precisar marca a chave primaria com uma anotaçao?

Criado 25 de junho de 2012
Ultima resposta 25 de jun. de 2012
Respostas 5
Participantes 3