este é o meu código:
@Column(columnName="firstname")
private String firstName;
@Column(columnName="lastname")
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
é possível ler o valor da minha anotação @Column ( columnName = "xyz123") em outra classe?
Myclass.class.getDeclaredFields()
para obter campos privadosClaro que é. Aqui está um exemplo de anotação:
E um exemplo de método anotado:
E um método de amostra em outra classe que imprime o valor do testText:
Não é muito diferente para anotações de campo como as suas.
Cheerz!
fonte
Nunca fiz isso, mas parece que o Reflection fornece isso.
Field
é umAnnotatedElement
e assim foigetAnnotation
. Esta página tem um exemplo (copiado abaixo); bastante simples se você conhece a classe da anotação e se a política de anotação retém a anotação em tempo de execução. Naturalmente, se a política de retenção não mantiver a anotação em tempo de execução, você não poderá consultá-la em tempo de execução.Uma resposta que já foi excluída (?) Forneceu um link útil para um tutorial de anotações que pode ser útil para você; Copiei o link aqui para que as pessoas possam usá-lo.
Exemplo desta página :
fonte
Elaborando a resposta de @Cefalópode, se você quisesse todos os nomes de coluna em uma lista, você poderia usar esta linha:
fonte
Embora todas as respostas fornecidas até agora sejam perfeitamente válidas, deve-se também ter em mente a biblioteca de reflexões do Google para uma abordagem mais genérica e fácil de digitalização de anotações, por exemplo
fonte
Você também pode usar tipos genéricos, no meu caso, levando em consideração tudo o que foi dito antes, você pode fazer algo como:
Lembre-se de que isso não equivalerá em 100% a SomeClass.class.get (...) ();
Mas pode fazer o truque ...
fonte
Em caso comum, você tem acesso privado para os campos, então você NÃO PODE usar getFields na reflexão. Em vez disso, você deve usar getDeclaredFields
Portanto, em primeiro lugar, você deve estar ciente se sua anotação de coluna tem a retenção de tempo de execução:
Depois disso, você pode fazer algo assim:
Obviamente, você gostaria de fazer algo com o campo - definir um novo valor usando o valor da anotação:
Portanto, o código completo pode ser semelhante a este:
fonte
Para as poucas pessoas que pedem um método genérico, isso deve ajudá-lo (5 anos depois: p).
Para o meu exemplo abaixo, estou puxando o valor de URL RequestMapping de métodos que têm a anotação RequestMapping. Para adaptar isso aos campos, basta alterar o
para
E troque o uso de RequestMapping por qualquer anotação que você queira ler. Mas certifique-se de que a anotação tenha @Retention (RetentionPolicy.RUNTIME) .
fonte
uma das maneiras que usei:
fonte