Java方法签名的获取实例代码

  

本文研究的主要的是Java方法签名的获取、下面是具体实现实例。

  

实例代码:

        包com.yunshouhu;   进口java.lang.reflect.Field;   进口java.lang.reflect.Method;   进口java.lang.reflect.Type;   进口java.util.Collection;   进口com.alibaba.fastjson.parser.DefaultJSONParser;   进口com.alibaba.fastjson.parser.JSONLexer;   进口com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;/* *   *获取Java的方法签的名,参考javah jni类路径/javap - s类路径。   * @author WuJianHua   * @date 2017年9月5日下午3:25:51   * http://blog.csdn.net/earbao   */公开课ASMUtilsForJavaH {   公共静态void main (String [] args){抛出异常   System.out.println (ASMUtilsForJavaH.getDesc (System.class));   System.out.println (ASMUtilsForJavaH.getDesc (String.class));   System.out.println (ASMUtilsForJavaH.getDesc (Integer.class));   System.out.println (ASMUtilsForJavaH.getDesc (int.class));=ASMUtilsForJavaH.class方法方法。getDeclaredMethod(“主要”,String [] . class);   系统。println (“javah jni”);   System.out.println (ASMUtilsForJavaH.getDesc(方法));   System.out.println (ASMUtilsForJavaH.getType (System.class));   System.out.println (ASMUtilsForJavaH.getType (ASMUtilsForJavaH.class));   }   公共静态布尔isAndroid(最终字符串vmName) {   最终字符串lowerVMName=vmName.toLowerCase ();   返回lowerVMName.contains (dalvik) | | lowerVMName.contains(“狐猴”);   }   公共静态布尔isAndroid () {   返回isAndroid (System.getProperty (“java.vm.name”);   }   公共静态字符串getDesc(最终方法方法){   最后StringBuffer buf=new StringBuffer ();   buf.append (“(”);   最后Class<& # 63;在[]类型=method.getParameterTypes ();   for (int i=0;我& lt;types.length;+ + i) {   [我])buf.append (getDesc(类型);   }   buf.append (“)”);   buf.append (getDesc (method.getReturnType ()));   返回buf.toString ();   }   公共静态字符串getDesc(最终Class<& # 63;比;returnType) {   如果(returnType.isPrimitive ()) {   返回getPrimitiveLetter (returnType);   }   如果(returnType.isArray ()) {   返回“[”+ getDesc (returnType.getComponentType ());   }   返回“L”+方法(returnType) +“;”;   }   公共静态字符串方法(最终Class<& # 63;比;parameterType) {   如果(parameterType.isArray ()) {   返回“[”+ getDesc (parameterType.getComponentType ());   }   如果(! parameterType.isPrimitive ()) {   最终字符串clsName=parameterType.getName ();   返回clsName.replaceAll (“\ \”。”、“/?;   }   返回getPrimitiveLetter (parameterType);   }   公共静态字符串getPrimitiveLetter(最终Class<& # 63;比;类型){   如果(Integer.TYPE.equals(类型)){   返回“我”;   }   如果(Void.TYPE.equals(类型)){   返回“V”;   }   如果(Boolean.TYPE.equals(类型)){   返回“Z”;   }   如果(Character.TYPE.equals(类型)){   返回“C”;   }   如果(byte.TYPE.equals(类型)){   返回“B”;   }   如果(short.TYPE.equals(类型)){   返回“S”;   }   如果(float.TYPE.equals(类型)){   返回“F”;   }   如果(long.TYPE.equals(类型)){   返回“J”;   }   如果(double.TYPE.equals(类型)){   返回“D”;   }   把新IllegalStateException(“类型:”+ type.getCanonicalName() +“不是原始类型”);   }   公共静态类型getMethodType(最终Class<& # 63;比;clazz、最终字符串methodName) {   尝试{   最后=clazz方法方法。getMethod (methodName (Class<& # 63;在[])新类[0]);   返回method.getGenericReturnType ();   }   抓住(异常交货){   返回null;   }   }   公共静态类型getFieldType(最终Class<& # 63;比;clazz、最终字符串字段名){   尝试{=clazz.getField final字段字段(字段名);   返回field.getGenericType ();   }   抓住(异常交货){   返回null;   }   }   公共静态孔隙parseArray(最终收集收集,最后ObjectDeserializer des,   最后DefaultJSONParser解析器,最终类型类型,最终对象字段名){   最后JSONLexer词法分析程序=parser.getLexer ();   如果(lexer.token ()==8) {   lexer.nextToken (16);   }   解析器。接受(14日14);   int指数=0;   而(真){   最终对象项=deser.deserialze(解析器、类型(对象)指数);   collection.add(项);   + +指数;   如果(lexer.token () !=16) {   打破;   }   lexer.nextToken (14);   }   解析器。接受(15、16);   }   }

Java方法签名的获取实例代码