Moje główne pytanie: Wiem, że możesz generalnie generować pola klas z refleksją, nawet jeśli nie znasz nazw zmiennych, typów, a nawet ile ich jest. Czy istnieje jednak sposób na wylistowanie wszystkich zmiennych w ramach bieżącej funkcji lub bieżącego zakresu, zakładając, że nie wiem, jakie są nazwy zmiennych?Jak wyświetlić listę wszystkich zmiennych lokalnych w ramach metody/funkcji Java?
Innymi słowy:
int x = 5;
int y = 42;
// some more code
//Now I want to println x and y, but assuming I cannot use "x" or "y".
byłbym też zadowolony z odpowiedzi na to pytanie: powiedzmy mi wolno przechowywać nazwy wszystkich zmiennych, czy to pomaga? np .:
Set<String> varNames = new HashSet<String>();
int x = 5;
varNames.add("x");
int y = 42;
varNames.add("y");
// some more code
//Now with varNames, can I output x and y without using "x" or "y"?
Dlaczego o to pytam? Tłumaczę język (y) XYZ na java przy użyciu ANTLR i chciałbym przedstawić prostą metodę wyprowadzania całego stanu programu w dowolnym momencie.
Trzecie możliwe rozwiązanie Byłbym szczęśliwy z: Jeśli nie jest to możliwe w Javie, czy jest jakiś sposób, aby napisać kod bajtowy dla funkcji, która odwiedza funkcję wywołującą i analizuje stos? To również rozwiązałoby problem.
Co byłoby niesamowite, gdyby Java miała odpowiednik Pythona eval()
lub php w postaci get_defined_vars()
.
Jeśli to robi różnicę, używam Java 6, ale wszystko dla Javy 5, 6 lub 7 powinno być dobre.
Dzięki!
Może to pytanie jest powiązane (http://stackoverflow.com/questions/2946279/how-do-i-print-the-method-body-reflectively) – user1406062