Как сохранить метод класса в базе данных? - PullRequest
1 голос
/ 10 марта 2020

Можно ли прочитать все методы класса java и сохранить их имена в базе данных?

@Entity
public class Action {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    public Action() {
    }

    public String methodA() {
        return "methodA";
    }

    public String methodB() {
        return "methodB";
    }
}

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Использование Java Отражение:

Method[] methods = Action.class.getDeclaredMethods();

for (int i = 0; i < methods.length; i++) {
     saveToDB(methods[i].toString());
}
0 голосов
/ 10 марта 2020

Вы также можете использовать javassist для получения всех методов во время выполнения. Даже если вы не знаете о структуре классов.

ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("class Name");
CtMethod[] methods=cc.getDeclaredMethods();
for(CtMethod method:methods){
 System.out.println(method.toString());
}
0 голосов
/ 10 марта 2020

Вы можете использовать метод java.lang.Class.getDeclaredMethods(), который возвращает массив Method объектов, включая publi c, защищенный, доступ по умолчанию (пакет) и приватные методы, но исключает унаследованные методы.

Action  cls = new Action ();
Class c = cls.getClass();
Method[] methods = c.getDeclaredMethods();
for(int i = 0; i < methods.length; i++) {
    System.out.println(methods[i].toString());
}

ваш вывод будет примерно таким:

publi c java .lang.String methodA ()
publi c java .lang.String methodB ()

Если вы хотите сохранить только имя ваших методов, вы можете использовать метод getName(). так что если вы сделаете это:

for(int i = 0; i < methods.length; i++) {
    System.out.println(methods[i].toString());
}

вы получите этот вывод:

methodA
methodB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...