所需的输出示例:
(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;
(Ljava/lang/String;)Lorg/w3c/dom/Attr;
可以使用javap实用程序生成此类签名:
javap -s -p org.w3c.dom.Node
但有没有办法以编程方式生成它们。我不想手动编写jni规范中的所有规则。
答案 0 :(得分:4)
为了完整起见,Offtopic note: 在我的用例中,我还需要转换,反之亦然。这可以通过方法Type.getArgumentTypes(sig)和Type.getReturnType(sig)来实现。结果类型为Type的数组元素提供方法getClassName(),您可以通过简单的if语句或map从中通过Class.forName或原始类获取引用类。
答案 1 :(得分:1)
我曾经试图创建这个关于生成方法签名的长篇大论,我记得通过跟随样式来做这件事,但我不确定它是一个安静的长时间
1)我编写了自己的类来生成方法签名 2)我使用了反射类来动态获取Names方法。
我希望这可以帮助您获得一个想法,如果不是您的问题的完整解决方案
答案 2 :(得分:1)
I generate like this:
private static String calculateMethodSignature(Method method){
String signature = "";
if(method != null){
signature += "(";
for(Class<?> c:method.getParameterTypes()){
String Lsig = Array.newInstance(c,1).getClass().getName();
signature += Lsig.substring(1);
}
signature += ")";
Class<?> returnType = method.getReturnType();
if(returnType == void.class){
signature += "V";
}else{
signature += Array.newInstance(returnType,1).getClass().getName();
}
signature = signature.replace('.','/');
}
return signature;
}
答案 3 :(得分:0)
Objectweb的用户ASM库。它不仅速度快,而且可以选择遍历课程