이 기사의 주요 연구는 Java 메소드 서명을 얻는 것이며 다음은 구체적인 구현 예입니다.
예제 코드 :
패키지 com.yunshouhu; import java.lang.reflect.field; import java.lang.reflect.method; import java.lang.reflect.type; import java.util.collection; import com.alibaba.fastjson.parser.defaultjsonparser; import com.alibaba. partjson.parser com.alibaba.fastjson.parser.deserializer.objectdeserializer;/*** Java 메소드 서명을 받으십시오. Javah -Jni ClassPath/Javap -S ClassPath를 참조하십시오. * @author wujianhua * @date 2017 년 9 월 5 일 오후 3시 25 분 51 분 * @url http://blog.csdn.net/earbao */public class asmutilsforjavah {public static void main (String [] args) 예외 {system.out.println (asmutilsforjavah.getDesc (system.class)); System.out.println (asmutilsforjavah.getDesc (string.class)); ystem.out.println (asmutilsforjavah.getdesc (integer.class)); System.out.println (asmutilsforjavah.getDesc (int.class)); 메소드 Method = asmutilsforjavah.class.getDeclaredMethod ( "main", String []. class); System.out.println ( "javah -jni "); system.out.println (asmutilsforjavah.getDesc (method)); system.out.println (asmutilsforjavah.gettype (system.class)); system.out.println (asmutilsforjavah.gettype (Asmutilsforjavah.class)); vmname) {Final String lowervmname = vmname.tolowercase (); return lowervmname.contains ( "dalvik") || lowervmname.contains ( "lemur");} public static boolean isandandroid () {return isandroid (system.getProperty ( "java.vm.name"));} public static string getDesc (최종 메소드 메소드) {최종 StringBuffer buf = new StringBuffer (); buf.append ( "("( ");"); method.getParameterTypes (); for (int i = 0; i <type.length; ++ i) {buf.append (getDesc (getDesc (getDesc (getDesc (}));} buf.append ( ")"); buf.Append (getDesc (method.getRetturnType ())); retion string <?); {if (returntype.isprimitive ()) {return getPrimitiveletter (returnType);} if (returnType.isArray ()) {return "[" + getDesc (returnType.getComponentType ());} return "l" + getType (returnType) + "; parametertype) {if (parametertype.isarray ()) {return "[" + getDesc (parameterType.getCompontyPe ());} if (! parameterType.isprimitive ()) {최종 문자열 ClsName = ParameterType.GetName (); return ClsName.replAceall ( "/", "/"); "/"); getPrimitiveletter (ParameterType);} public static string getPrimitiveletter (final class <?> type) {if (integer.type.equals (type)) {return "i";} if (void.type.equals (type)) {return "v";} if (boolean.type.equals (boolean.type.equals) (arribute.type.equals (type)) {return "c";} if (byte.type.equals (type)) {return "b";} if (short.type.equals (type)) {return "s";} if (float.type.equals (type)) {return "f"); (double.type.equals (type)) {return "d";} 새로운 불법 스테이트 렉스크 던지기 ( "type :" + type : " + type.getCanonicalName () +" + " +" + "});} public static type getMethodtype (최종 클래스 <?> clazz, final string methodname) {clatz. (clasz.ggetmed, (methodname,) class [0]); return method.getgenericreturntype ();} catch (예외) {return null;}} public static type getfieldtype (최종 클래스 <?> 클라즈, 최종 문자열 필드 이름) {try {final field = clazz.getfield (fieldname); return field.getGenericType ()} catch (예외)}} parsearray (최종 컬렉션 컬렉션, 최종 ObjectDeserializer Deser, Final DefaultJsonParser Parser, 최종 유형, 최종 객체 필드 이름) {Final Jsonlexer Lexer = Parser.getlexer (); if (Lexer.token () == 8) {Lexer.nextToken (16);} Parser.accept (14, 14); item = deser.deserialze (Parser, type, (Object) index); collection.add (item); ++ index; if (lexer.token ()! = 16) {break;} lexer.nextToken (14);} parser.accept (15, 16);}}위는 Java 메소드 서명의 인스턴스 코드를 얻는 것에 대한이 기사의 전체 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!