Метод Java Run, введенный пользователем

Я хочу иметь текстовое поле и запускать все, что пользователь вводит в него. Поэтому, если пользователь вводит, aPackage.AClass.aMethod(parms), он будет запускать этот метод в пакете, классе и с этими параметрами. Это возможно? Причина, по которой я хочу, так это, чтобы я мог отлаживать свой код и переводить программу в "режим разработчика" и выполнять любую команду.

2 ответа

Да, это возможно. Используя API Java Reflection (учебник на docs.oracle.com), вы можете получить доступ к классам и их методам по имени. Потенциальная проблема, если вы не знаете тип аргументов, - это перегруженные методы. И имейте в виду, что позволить пользователю выполнить случайный код является потенциальной проблемой безопасности.


Если вы знаете имя класса, имя метода, вводите типы параметров, то используя отражение, это может быть достигнуто. Вот небольшой фрагмент кода для него:

//load the AppTest at runtime
 Class cls = Class.forName("aPackage.AClass");
 Object obj = cls.newInstance();

 //call the printIt method
 Method method = cls.getDeclaredMethod("aMethod", noparams);
 method.invoke(obj, null);

licensed under cc by-sa 3.0 with attribution.