Как получить имя строки метода в Java?

Как я могу узнать посредством отражения, каково имя строки метода?

Например, данный:

class Car{
   public void getFoo(){
   }
}

Я хочу получить строку "getFoo", что-то как следующее:

 Car.getFoo.toString() == "getFoo" // TRUE
26
задан jjnguy 11 June 2010 в 14:04
поделиться

5 ответов

Поскольку методы не являются объектами, у них нет прямых свойств (как вы ожидаете от функций первого класса в языках типа JavaScript).

Самое близкое, что вы можете сделать, это вызвать Car.class.getMethods()

Car.class - это Class объект, который вы можете использовать для вызова любого из методов отражения.

Однако, насколько я знаю, метод не может идентифицировать себя.

20
ответ дан 28 November 2019 в 06:24
поделиться

Строку можно получить следующим образом:

Car.class.getDeclaredMethods()[0].getName();

Это для случая одного метода в вашем классе. Если вы хотите перебрать все объявленные методы, вам нужно будет перебрать массив, возвращенный Car.class.getDeclaredMethods () :

for (Method method : Car.class.getDeclaredMethods()) {
    String name = method.getName();
}

Вы должны использовать getDeclaredMethods () , если вы хотите просмотреть их все, getMethods () вернет только общедоступные методы.

И, наконец, если вы хотите увидеть имя метода, который выполняется в данный момент, вы должны использовать этот код:

Thread.currentThread().getStackTrace()[1].getMethodName();

Это позволит получить трассировку стека для текущего потока и вернуть имя метода. на его вершине.

36
ответ дан 28 November 2019 в 06:24
поделиться

Подождите, поскольку вы уже знаете имя метода, не могли бы вы просто ввести его как строку?

Вместо (псевдо) Class.methodName.toString () , просто используйте "methodName ".

В противном случае вы можете использовать Class # getDeclaredMethods () , чтобы получить все методы в классе

0
ответ дан 28 November 2019 в 06:24
поделиться

Итак, вы хотите получить имя текущего выполняемого метода? Вот несколько уродливый способ сделать это:

Exception e = new Exception();
e.fillInStackTrace();
String methodName = e.getStackTrace()[0].getMethodName();
14
ответ дан 28 November 2019 в 06:24
поделиться

попробуйте это,

 import java.lang.reflect.*;
    public class DumpMethods {
        public static void main(String args[]) {
            try {
                Class c = Class.forName(args[0]);
                Method m[] = c.getDeclaredMethods();
                for (int i = 0; i < m.length; i++)
                    System.out.println(m[i].toString());
            } catch (Throwable e) {
                System.err.println(e);
            }
        }
    }
1
ответ дан 28 November 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: