gpt4 book ai didi

java - 比较 ASM MethodNode 参数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:19 24 4
gpt4 key购买 nike

我正在尝试创建一个方法来比较 2 个方法的参数并给我一个匹配参数的百分比,例如:

Method1(int i, boolean b, char c)    
Method2(boolean b, int i)
Method3(char c)
Method4(double d)


Method1 and Method2 = 66% -> 2 matching parameters
Method1 and Method3 = 33% -> 1 matching parameter
Method1 and Method4 = 0% -> 0 matching parameters

谁能告诉我如何做到这一点?

最佳答案

更新了 Holger 的提示

private static float compare(MethodNode mn1, MethodNode mn2) {
Type[] typeArgs1 = Type.getArgumentTypes(mn1.desc);
Type[] typeArgs2 = Type.getArgumentTypes(mn2.desc);
int max = Math.max(typeArgs1.length, typeArgs2.length);
if (max == 0)
return 1f;
int matches = 0;
List<Type> types = Arrays.asList(typeArgs1);
for (Type arg : typeArgs2)
if (types.contains(arg))
matches++;
return ((float) matches / max);
}

原始代码:

private static float compare(MethodNode mn1, MethodNode mn2) {
Type t1 = Type.getMethodType(mn1.desc);
Type t2 = Type.getMethodType(mn2.desc);
Type[] targs1 = t1.getArgumentTypes();
Type[] targs2 = t2.getArgumentTypes();
int max = Math.max(targs1.length, targs2.length);
int matches = 0;
if (max == 0)
return 1f;
List<String> types1 = new ArrayList<String>();
for (Type t : targs1)
types1.add(t.getDescriptor());
for (Type t : targs2)
if (types1.contains(t.getDescriptor()))
matches++;
return (1F * matches / max);
}

示例方法的输出:

0,1  0.0
0,2 0.0
0,3 0.0
0,4 0.0
1,2 0.6666667
1,3 0.33333334
1,4 0.0
2,3 0.0
2,4 0.0
3,4 0.0

关于java - 比较 ASM MethodNode 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41650347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com