gpt4 book ai didi

java - 如何在方法中获取参数值的完全限定名称

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

我必须获得方法参数的完全限定名称。

例如:

public void display(Custom1 a, Custom2 b) {
String x = a.getValue();
String y = b.getValue();
}

这里,Custom1Custom2com.test.resource 中,所以我需要获取类似

的值
com.test.resource.Custom1

我在我的 eclipse 插件中需要这个。我使用了 IMethod.getParameterTypes() 。结果就像

QCustom1; 

如何获取方法参数的完全限定名称?

String[] parameterNames = iMethod.getParameterNames();                  
ILocalVariable[] parameterTypes = currentmethod.getMethod().getParameters();
for (int j=0; j < parameterNames.length; ++j) {
System.out.println("parameter name:" + parameterNames[j]);
System.out.println("parameter type:" + parameterTypes[j]);
}

最佳答案

如果你想避免反射并更喜欢纯 JDT 解决方案(在 Eclipse 插件中,反射 API 不是很友好),这里有一个替代方案。

为了解码 JDT 编码类型名称,您应该使用 Signature类。

解析类型名称部分

一个重要的步骤是解析方法声明 IType对象能够使用此类型导入重新计算全名。然后 #resolveType(simpleName)方法应该可以帮助你。它的使用很微妙。

从部分构建全名

这是从参数类型编码名称到全名的代码,它在从声明类型解析名称时采用第一个解决方案:

ILocalVariable parameterVariable = ...
IType declaringType = method.getDeclaringType();
String name = parameterVariable.getTypeSignature();
String simpleName = Signature.getSignatureSimpleName(name);
String[][] allResults = declaringType.resolveType(simpleName);
String fullName = null;
if(allResults != null) {
String[] nameParts = allResults[0];
if(nameParts != null) {
fullName = new String();
for(int i=0 ; i < nameParts.length ; i++) {
if(fullName.length() > 0) {
fullName += '.';
}
String part = nameParts[i];
if(part != null) {
fullName += part;
}
}
}
}
return fullName;

从简单名称(非 JDT 编码)获取全名的方法相同,无需使用 Signature 类。结果类型的解决方案是一样的,here是代码。

关于java - 如何在方法中获取参数值的完全限定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775320/

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