java - 代码模型 : how to check if I need to generate a generic type?

标签 java generics reflection types sun-codemodel

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

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

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

我想得到:

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

这里有一个相关的问题演示了如何在类的开头添加: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 类型?

最佳答案

不要调用“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/

相关文章:

java - 检查 JSONObject 是否包含嵌套值(如果未放置新值)

swift - 为什么是 'there cannot be more than one conformance, even with different conditional bounds' ?

c# - 使用泛型调用重载方法

c# - 设置对象的所有 bool 属性值

java - 一段时间后未调用 ViewTreeObserver 监听器

java - 我可以限制分布式应用发出的请求吗?

java - 如何在 Mac 上安装旧版本的 JDK?

android - 获取用于解析嵌套的 Parcelable 泛型字段的泛型类加载器

.net - 使用 .NET 反射的私有(private)方法。为什么?

c# - ClearScript 中的重载运算符