Java方法簽名的獲取實例代碼
更新時間:2018年02月10日 14:45:46 作者:yunshouhu
這篇文章主要介紹了Java方法簽名的獲取實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
本文研究的主要是Java方法簽名的獲取,下面是具體實現(xiàn)實例。
實例代碼:
package 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.fastjson.parser.JSONLexer; import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer; /** * 獲取Java的方法簽名,參考javah -jni 類路徑/javap -s 類路徑。 * @author WuJianHua * @date 2017年9月5日 下午3:25:51 * @url http://blog.csdn.net/earbao */ public class ASMUtilsForJavaH { public static void main(String[] args) throws Exception { 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)); Method 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)); } public static Boolean isAndroid(final String vmName) { final String lowerVMName = vmName.toLowerCase(); return lowerVMName.contains("dalvik") || lowerVMName.contains("lemur"); } public static Boolean isAndroid() { return isAndroid(System.getProperty("java.vm.name")); } public static String getDesc(final Method method) { final StringBuffer buf = new StringBuffer(); buf.append("("); final Class<?>[] types = method.getParameterTypes(); for (int i = 0; i < types.length; ++i) { buf.append(getDesc(types[i])); } buf.append(")"); buf.append(getDesc(method.getReturnType())); return buf.toString(); } public static String getDesc(final Class<?> returnType) { if (returnType.isPrimitive()) { return getPrimitiveLetter(returnType); } if (returnType.isArray()) { return "[" + getDesc(returnType.getComponentType()); } return "L" + getType(returnType) + ";"; } public static String getType(final Class<?> parameterType) { if (parameterType.isArray()) { return "[" + getDesc(parameterType.getComponentType()); } if (!parameterType.isPrimitive()) { final String clsName = parameterType.getName(); return clsName.replaceAll("\\.", "/"); } return 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(type)) { return "Z"; } if (Character.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"; } if (long.TYPE.equals(type)) { return "J"; } if (double.TYPE.equals(type)) { return "D"; } throw new IllegalStateException("Type: " + type.getCanonicalName() + " is not a primitive type"); } public static Type getMethodType(final Class<?> clazz, final String methodName) { try { final Method method = clazz.getMethod(methodName, (Class<?>[]) new Class[0]); return method.getGenericReturnType(); } catch (Exception ex) { return null; } } public static Type getFieldType(final Class<?> clazz, final String fieldName) { try { final Field field = clazz.getField(fieldName); return field.getGenericType(); } catch (Exception ex) { return null; } } public static void parseArray(final Collection collection, final ObjectDeserializer deser, final DefaultJSONParser parser, final Type type, final Object fieldName) { final JSONLexer lexer = parser.getLexer(); if (lexer.token() == 8) { lexer.nextToken(16); } parser.accept(14, 14); int index = 0; while (true) { final Object item = deser.deserialze(parser, type, (Object) index); collection.add(item); ++index; if (lexer.token() != 16) { break; } lexer.nextToken(14); } parser.accept(15, 16); } }
總結(jié)
以上就是本文關(guān)于Java方法簽名的獲取實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
springboot+thymeleaf整合阿里云OOS對象存儲圖片的實現(xiàn)
本文主要介紹了springboot+thymeleaf整合阿里云OOS對象存儲圖片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05關(guān)于spring依賴注入的方式以及優(yōu)缺點
這篇文章主要介紹了關(guān)于spring依賴注入的方式以及優(yōu)缺點,依賴注入,是IOC的一個方面,是個通常的概念,它有多種解釋,這概念是說你不用創(chuàng)建對象,而只需要描述它如何被創(chuàng)建,需要的朋友可以參考下2023-07-07SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細步驟
Spring Boot是一個開源的Java框架,它簡化了基于Spring的應用程序的開發(fā)和部署,HikariCP是一個高性能的Java數(shù)據(jù)庫連接池,被廣泛應用于Java開發(fā)領(lǐng)域,它是目前最快和最輕量級的連接池之一,本文介紹了SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細步驟,需要的朋友可以參考下2024-08-08