Refleksja metoda przyjmująca String

Refleksja metoda przyjmująca String
M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 221
0

W jaki sposób pobrać metodę, która nie przyjmuje żadnych parametrów lub przyjmuje String

Kopiuj
Object o = constructor.newInstance();
Field[] f = o.getClass().getDeclaredFields();
for(Field field : f) {
if() // jaki warunek?
}

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
3

Zacząłbym od getMethods() a nie fields.

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 221
0

Poprawione

Kopiuj
Method[] m = o.getClass().getMethods();
				
				for(Method method : m) {
S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
2

@Mattii4211: To co Shalom napisał + method.getParameterTypes()

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 221
0

Jeśli ma być pusta to robię method.getParameterTypes() == null a jak ze string sobie poradzić?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

No a sprawdź co ci zwraca ten getParameterTypes()...

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 221
0

Tablicę obiektów

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

O RLY? Dokumentacja mówi co innego.
https://docs.oracle.com/javase/10/docs/api/java/lang/reflect/Executable.html#getParameterTypes()

Kopiuj
public abstract Class<?>[] getParameterTypes()

Czyli dostajesz tablicę obiektów typu Class. Można je np. porównać ze String.class

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 221
0

A jeszcze 1 pytanie w jaki sposób z adnotacji wyłuskać publiczne pole?
coś takiego zadziała:

Kopiuj
if (method.isAnnotationPresent(StringParameter.class)) {
		Field fs = o.getClass().getAnnotations().getClass().getField("value");
		String s = String.valueOf(fs.getChar(this));

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.