gpt4 book ai didi

java - 代码生成: create interface for class

转载 作者:行者123 更新时间:2023-12-01 14:14:08 25 4
gpt4 key购买 nike

我正在编写一个实用程序来使用 Apache Velocity 生成类的接口(interface)。目前它使用以下 dto:

public class ClassDescriptor {
private String name;
private List<MethodDescriptor> methods;
// getters/setters
}

public class MethodDescriptor {
private String name;
private String returnType;
private List<ParamDescriptor> parameters;
// getters/setters
}

public class ParamDescriptor {
public String name;
public String type;
public List<String> generics;
// getters/setters
}

这是目前使用的代码:

final Class<?> clazz;
final ClassDescriptor classDescriptor = new ClassDescriptor();
final List<MethodDescriptor> methodDescriptors = new ArrayList<MethodDescriptor>();
for (Method method : clazz.getDeclaredMethods()) {
final MethodDescriptor methodDescriptor = new MethodDescriptor();
final Paranamer paranamer = new AdaptiveParanamer();
final String[] parameterNames = paranamer.lookupParameterNames(method, false);
final List<ParamDescriptor> paramDescriptors = new ArrayList<ParamDescriptor>();

for (int i = 0; i < method.getParameterTypes().length; i++) {
final ParamDescriptor paramDescriptor = new ParamDescriptor();
paramDescriptor.setName(parameterNames[i]);
paramDescriptors.add(paramDescriptor);
paramDescriptor.setType(method.getGenericParameterTypes()[i].toString().replace("class ", ""));
}
methodDescriptor.setParameters(paramDescriptors);
methodDescriptor.setName(method.getName());

methodDescriptor.setReturnType(method.getGenericReturnType().toString());
methodDescriptors.add(methodDescriptor);
}
classDescriptor.setMethods(methodDescriptors);
classDescriptor.setName(simpleName);

这个????应该包含获取参数泛型列表的代码,这就是问题所在,我仍然找不到方法来做到这一点。我正在使用以下测试类:

public class TestDto {
public void test(Map<Double, Integer> test) {
}
}

我怎样才能得到这些信息?我已经尝试过 ParameterizedType ,但没​​有成功。

更新:上面的代码现在可以运行。

最佳答案

    Class<TestDto> klazz = TestDto.class;
try {
Method method = klazz.getDeclaredMethod("test", Map.class);
Type type = method.getGenericParameterTypes()[0];
System.out.println("Type: " + type);
} catch (NoSuchMethodException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} catch (SecurityException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}

Type: java.util.Map<java.lang.Double, java.lang.Integer>

由于类型删除,这仍然是慷慨的信息。没有听说任何关于运行时泛型类型使用的插入。

关于java - 代码生成: create interface for class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275156/

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