2014-01-06 4 views
2

Я пытаюсь написать код, который принимает подпись метода как вход String, а затем извлекает из него информацию, как - тип возвращаемого значения, модификаторы, имя метода, типы параметров, имена параметров, исключения.Анализ строки подписи метода

Существует множество способов написать подпись метода, и я хочу, чтобы мой код мог иметь дело со всеми из них. Поэтому я скептически отношусь к написанию.

Java понимает это, благодаря грамматике java. Я нашел этот класс SignatureParser в sun.reflect.generics.parser (источник: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/reflect/generics/parser/SignatureParser.java)

Я застрял и не в состоянии использовать его, однако мне нужна ваша помощь. Вот то, что я пытался до сих пор (это дает ошибку в самом начале)

MethodTypeSignature mts = SignatureParser.make().parseMethodSig(method); 

Чтобы выяснить, что это неправильно, я пытался разбить его. Но я ничего не могу понять.

Кроме того, этот способ разбора оставляет меня с типом метода, но не с именем метода. Должен ли я писать код вручную, или кто-нибудь может предложить какой-нибудь библиотечный метод?

+0

Существует, вероятно, некоторые идеи о том, как это сделать в утилитах javadoc, они уже разбирают код и разделяют методы. –

ответ

-2

Прежде всего, ваш метод должен быть определен под классом в запущенном jvm. Затем вы получаете информацию об этом классе.

Class cls = Class.forName("yourclassname"); 

После этого вы можете получить информацию о функции с помощью этого метода.

Method[] metods = cls.getMethods(); 

Вы можете перебирать методы найти тот, который вы заинтересованы в и использовать множество полезных функций для извлечения информации, как getParameterTypes или getExeptionTypes ...

Method yourMethod = null; 
if (metods[i].getName().equals("yourmethodname")){ 
    yourMethod = methods[i]; 
} 
yourMethod.getParameterTypes(); 
yourMethod.getReturnType(); 
... 

http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html

+0

Благодарим вас за быстрый ответ. Код в вашем объяснении работает, как вы сказали, для класса в запущенной JVM. Он извлекает информацию из методов, определенных в этом классе. Моя проблема заключается в том, что я беру входной сигнал подписи метода от пользователя (и сохраняю его в строке). Итак, как мне добраться оттуда до вашего решения? Отсутствует ссылка, которую я не могу понять ... – Nikhil

+0

Нет ничего, что остановило бы вас от разбора имени класса и имени функции из подписи метода :)) – cgon

+0

no no no. Я имею в виду ... Представьте себе эту область текста. Пользователь вводит «public static void main (String [] args) здесь. Я беру его. Сохраните его в' String methodd = new String («public static void main (String [] args)' ... Куда я иду отсюда ... Решение, которое вы предлагаете, анализирует методы в моем классе ... Так например, это мой класс: 'public class MethodSpy { String methodd; public static methoddParser (String methodd) { // метод тело } } ' Так что ваше решение будет разбирать этот метод -.' открытые статические methoddParser (String methodd) ' Я хочу разбора' Струнный methodd' – Nikhil

Смежные вопросы