我正在浏览类中的方法,然后在另一个地方生成具有不同名称的方法 - 参数和返回类型是相同的,我通过 method.getParameters()、method.isGeneric() 等检查它们
因此,在原始类中定义如下:
public void fun1(T a, T b){ //something...}
我想得到:
public <T> void anotherName(T a, T b) { //something }
这里有一个相关的问题演示了如何在类的开头添加
JTypeVar t = checkedMethod.generify("T");
checkedMethod.param(jCodeModel.ref("LinkedList").narrow(t), "list");
但是,我想在循环中检查所有方法并确定其中哪些方法具有泛型类型,因此需要在名称前添加 < T> 。如果我泛化所有方法,就会出现这样的情况:
public <String> String fun2(String a, String b);
然后不清楚我是否愿意分配
String s = fun2("s","s");
有没有办法检查给定类型是否是已知的 Java 类型?
最佳答案
不要调用“getParameters”,而使用“getGenericParameterTypes”。 对于您的示例,您将获得一个由两个“Type”实例组成的数组。现在“类型”可以是
- 类(如字符串)
- 参数化类型(= 包含泛型的类型,例如列表)
- 类型变量(如“T”)
您可以循环参数并执行“instanceof”来分析您正在处理的类型,然后采用您的代码。
这是一个关于这个主题的非常好的博客:http://blog.vityuk.com/2011/03/java-generics-and-reflection.html
关于java - 代码模型 : how to check if I need to generate a generic type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17740210/