Czy można uzyskać nazwę parametru metody za pomocą odbicia Java?
Gdybym miał taką klasę:
public class Whatever
{
public void aMethod(int aParam);
}
czy istnieje sposób, aby dowiedzieć się, że
aMethodużywa parametru o nazwie
aParam, czyli jest to typ
int?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
14 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Dlatego dla Twojej klasy możemy przeprowadzić test ręczny:
co powinno dać wynik
[aParam]
, jeśli przekazałeś argument do kompilatora Java 8.Dla użytkowników Maven:
Więcej informacji można znaleźć pod następującymi linkami:
Anonimowy użytkownik
Potwierdzenie od:
Aby napisać funkcję autouzupełniania dla edytora (jak powiedziałeś w jednym z komentarzy), jest kilka opcji:
Anonimowy użytkownik
Potwierdzenie od:
Próbuje zdefiniować nazwy metod na kilka różnych sposobów. Jeśli klasa została skompilowana za pomocą debugowania, może pobrać informacje, odczytując kod bajtowy klasy.
Innym sposobem jest wstrzyknięcie prywatnego statycznego elementu członkowskiego do kodu bajtowego klasy po jego skompilowaniu, ale przed umieszczeniem go w jar. Następnie używa odbicia, aby pobrać te informacje z klasy w czasie wykonywania.
https://github.com/paul-hammant/paranamer
https://github.com/paul-hammant/paranamer
Miałem problemy z używaniem tej biblioteki, ale w końcu udało mi się ją uruchomić. Mam nadzieję zgłosić opiekunowi problemy.
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Kod
musi być skompilowany za pomocą kompilatora kompatybilnego z Javą 8
z włączoną opcją przechowywania formalnych nazw parametrów (opcja
-parameters
).
Wtedy ten fragment kodu powinien działać:
Anonimowy użytkownik
Potwierdzenie od:
http://java.sun.com/j2se/1.4.2 ... %2529
http://java.sun.com/j2se/1.4.2 ... %2529
Nie możesz jednak podać nazwy użytego argumentu.
Anonimowy użytkownik
Potwierdzenie od:
Jest to możliwe i Spring MVC 3 to robi, ale nie znalazłem czasu, aby dokładnie zobaczyć, jak.
Dopasowywanie nazw parametrów metod
do nazw URI zmiennych szablonu, które możesz
można to zrobić tylko wtedy, gdy Twój kod jest skompilowany
z włączonym debugowaniem. Jeśli masz
jeśli debugowanie nie jest włączone, powinieneś
Podaj nazwę szablonu URI
nazwa zmiennej w polu @PathVariable
adnotacje do oprawy
dozwolona wartość nazwy do zmiennej
parametr metody. Na przykład:
Pochodzi z
dokumentacja wiosenna
http://static.springsource.org ... pping
Anonimowy użytkownik
Potwierdzenie od:
czy możesz
użyj adnotacji, aby zawinąć nazwę parametru i uzyskać ją przez odbicie.
Nie jest to najczystsze rozwiązanie, ale spełnia swoje zadanie. Niektóre usługi sieciowe faktycznie robią to, aby zachować nazwy parametrów (np. Wdrażanie WS z Glassfish).
Anonimowy użytkownik
Potwierdzenie od:
java.beans.ConstructorProperties
http://docs.oracle.com/javase/ ... .html, to jest adnotacja przeznaczona właśnie do tego.
Anonimowy użytkownik
Potwierdzenie od:
Ale prawdopodobnie skończysz z taką listą:
["int : arg0"]
Myślę, że zostanie to naprawione w Groovy 2.5+
https://issues.apache.org/jira/browse/GROOVY-7423
Tak więc obecna odpowiedź brzmi:
Zobacz też:
Dla każdej metody wtedy coś takiego:
Anonimowy użytkownik
Potwierdzenie od:
https://i.stack.imgur.com/RSLra.png
Anonimowy użytkownik
Potwierdzenie od:
Tutaj jest dobra odpowiedź ...
Jak uzyskać nazwy parametrów konstruktorów obiektu (odbicie)?
https://coderoad.ru/2729580/
Blisko
@AdamPaynter..
.
przy użyciu biblioteki ASM. Podałem przykład, aby pokazać, jak możesz osiągnąć swój cel.
Przede wszystkim zacznij od pom.xml z tymi zależnościami.
Wtedy ta klasa powinna robić, co chcesz. Po prostu wywołaj statyczną metodę .
Oto przykład z testem jednostkowym.
Pełny przykład można znaleźć pod adresem
GitHub
https://github.com/danidemi/po ... d-asm
Ostrzeżenia
>
Anonimowy użytkownik
Potwierdzenie od:
http://forums.java.net/jive/th ... t%3D0
http://forums.java.net/jive/th ... t%3D0
)
Krótko mówiąc, nie możesz go zdobyć, jeśli nie pracujesz bezpośrednio z plikami źródłowymi (podobnie do tego, co robi APT w czasie kompilacji).
Anonimowy użytkownik
Potwierdzenie od:
Jeśli jednak użycie refleksji nie jest rygorystycznym wymogiem, możesz uzyskać te informacje bezpośrednio z kodu źródłowego (o ile go masz).