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

网友投稿 302 2023-02-17


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

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

实例代码:

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;http://

import com.alibaba.fastjson.parser.JSONLexer;

import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;

/**

* 获取Java的方法签名,参考http://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()) {

VFxmOMjRKs 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)) {

VFxmOMjRKsreturn "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);

}

}

总结

以上就是本文关于Java方法签名的获取实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎样写api接口文档(api接口文档示例)
下一篇:java中jvm逃逸问题分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~