我想知道第 4 章类文件格式 - 第 4.3.3 节中指定的提供方法描述符的方法的参数数量。是否有提供此实用程序的内置功能?
问问题
919 次
4 回答
3
我不知道内置方法,但偶尔我已经实现了一个。
private static Pattern allParamsPattern = Pattern.compile("(\\(.*?\\))");
private static Pattern paramsPattern = Pattern.compile("(\\[?)(C|Z|S|I|J|F|D|(:?L[^;]+;))");
int getMethodParamCount(String methodRefType) {
Matcher m = allParamsPattern.matcher(methodRefType);
if (!m.find()) {
throw new IllegalArgumentException("Method signature does not contain parameters");
}
String paramsDescriptor = m.group(1);
Matcher mParam = paramsPattern.matcher(paramsDescriptor);
int count = 0;
while (mParam.find()) {
count++;
}
return count;
}
欢迎您在此处参考完整的源代码。
于 2012-06-18T16:57:54.043 回答
0
看看这是否有效......我也在使用 ASM,这是我炮制的方法......现在已经使用了一段时间......
public static int getMethodArgumentCount(String desc) {
int beginIndex = desc.indexOf('(') + 1;
int endIndex = desc.lastIndexOf(')');
String x0 = desc.substring(beginIndex, endIndex);//Extract the part related to the arguments
String x1 = x0.replace("[", "");//remove the [ symbols for arrays to avoid confusion.
String x2 = x1.replace(";", "; ");//add an extra space after each semicolon.
String x3 = x2.replaceAll("L\\S+;", "L");//replace all the substrings starting with L, ending with ; and containing non whitespace characters inbetween with L.
String x4 = x3.replace(" ", "");//remove the previously inserted spaces.
return x4.length();//count the number of elements left.
}
于 2012-08-03T00:51:15.613 回答
-1
方法#getParameterTypes().length ?
于 2012-06-18T16:50:53.643 回答
-1
您可以使用method.getParameterTypes()
. 它给你一个参数类型的数组,所以你可以知道有多少个参数。
于 2012-06-18T16:52:13.127 回答