to jest mój kod:
@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;
}
Jest to możliwe, aby odczytać wartość mojego adnotacji @Column ( columnName = „xyz123”) w innej klasy?
java
annotations
getter-setter
java-6
Pszczoły
źródło
źródło
Myclass.class.getDeclaredFields()
aby uzyskać prywatne polaOczywiście, że jest. Oto przykładowa adnotacja:
I przykładowa metoda z adnotacjami:
I przykładowa metoda w innej klasie, która drukuje wartość testText:
Niewiele różni się od adnotacji pól, takich jak Twoja.
Cheerz!
źródło
Nigdy tego nie robiłem, ale wygląda na to, że Reflection to zapewnia.
Field
jestAnnotatedElement
i tak jestgetAnnotation
. Ta strona zawiera przykład (skopiowany poniżej); dość proste, jeśli znasz klasę adnotacji i jeśli zasada adnotacji zachowuje adnotację w czasie wykonywania. Oczywiście, jeśli zasady przechowywania nie zachowują adnotacji w czasie wykonywania, nie będzie można wysyłać do niej zapytań w czasie wykonywania.Odpowiedź, która została usunięta (?), Stanowiła przydatne łącze do samouczka dotyczącego adnotacji , który może okazać się pomocny; Skopiowałem link tutaj, aby ludzie mogli go używać.
Przykład z tej strony :
źródło
Rozwijając odpowiedź @Cephalopod, jeśli chcesz, aby wszystkie nazwy kolumn znajdowały się na liście, możesz użyć tego onelinera:
źródło
Chociaż wszystkie dotychczas udzielone odpowiedzi są całkowicie prawidłowe, należy również pamiętać o bibliotece refleksji Google, aby uzyskać bardziej ogólne i łatwiejsze podejście do skanowania adnotacji, np.
źródło
Możesz także użyć typów ogólnych, w moim przypadku, biorąc pod uwagę wszystko, co zostało powiedziane, zanim będziesz mógł zrobić coś takiego:
Pamiętaj, że to nie będzie równoważne w 100% SomeClass.class.get (...) ();
Ale może załatwić sprawę ...
źródło
W typowym przypadku masz prywatny dostęp do pól, więc NIE MOŻESZ używać getFields w refleksji. Zamiast tego powinieneś użyć getDeclaredFields
Po pierwsze, powinieneś wiedzieć, czy adnotacja w kolumnie ma czas przechowywania w czasie wykonywania:
Następnie możesz zrobić coś takiego:
Oczywiście chciałbyś coś zrobić z polem - ustaw nową wartość używając wartości adnotacji:
Tak więc pełny kod może wyglądać następująco:
źródło
Dla nielicznych osób proszących o ogólną metodę powinno ci to pomóc (5 lat później: p).
W poniższym przykładzie pobieram wartość adresu URL RequestMapping z metod, które mają adnotację RequestMapping. Aby dostosować to do pól, po prostu zmień
do
I zamień użycie RequestMapping na dowolną adnotację, którą chcesz przeczytać. Ale upewnij się, że adnotacja ma @Retention (RetentionPolicy.RUNTIME) .
źródło
jeden ze sposobów, w jaki go użyłem:
źródło