1

我正在浏览类中的方法,然后在另一个地方生成具有不同名称的方法 - 参数和返回类型相同,我通过 method.getParameters()、method.isGeneric() 等检查它们。

因此,在原始类中定义如下:

public void fun1(T a, T b){ //something...}

我想得到:

public <T> void anotherName(T a, T b) { //something }

这里有一个相关的问题,它演示了如何在类的开头添加 <T>:Sun CodeModel generic method

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 类型?

4

1 回答 1

0

不要调用“getParameters”,使用“getGenericParameterTypes”。对于您的示例,您将获得一个包含两个“类型”实例的数组。现在“类型”可以

  • 一个类(如字符串)
  • 一个 ParameterizedType(= 包含像 List 这样的泛型的类型)
  • 类型变量(如“T”)

您可以循环参数并执行“instanceof”来分析您正在处理的类型,然后采用您的代码。

这是一个关于这个主题的非常好的博客:http: //blog.vityuk.com/2011/03/java-generics-and-reflection.html

于 2013-07-20T08:58:56.030 回答