Flask接口签名sign原理与实例代码浅析
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~