0
我正在編寫一個util來爲使用Apache Velocity的類生成接口。目前,它使用以下DTOS:代碼生成:爲類創建接口
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
沒有運氣。
更新:上面的代碼現在正在工作。
非常好!對我來說,主要的問題是讓泛型類將它們添加到導入列表中。我忘記了我們可以使用像java.util.blablabla這樣的完整路徑。此外,簡單的類有一個小問題,因爲它返回「java.util.String類」。目前我正在使用'paramDescriptor.setType(method.getGenericParameterTypes()[i] .toString()。replace(「class」,「」))''。不是很優雅,但很有效。我必須檢查這是否適合返回類型,之後,我會解答答案。 –