java - 为什么外部类在泛型类型名称中出现两次?

标签 java reflection code-generation

<分区>

问:为什么包含类的名字出现了两次?

上下文:我正在生成代码,目标是获取字段的声明,如源代码中所写(完全限定没问题,但我需要类型参数):test.Foo.Bar<java.lang.String>

package test;

import java.lang.reflect.Field;
import java.lang.reflect.Type;

public class Foo
{
  public static class Bar<TYPE> {}

  private Bar<String> bar;

  public static void main(String[] args) throws Exception
  {
    Field field = Foo.class.getDeclaredField("bar");
    Type genericType = field.getGenericType();
    Type type = field.getType();

    System.out.println("genericType: " + genericType.getTypeName());
    System.out.println("       type: " + type.getTypeName());
  }
}

输出:

genericType: test.Foo.test.Foo$Bar<java.lang.String>
       type: test.Foo$Bar

更新: 谢谢大家的意见。由于这个问题被标记为重复,我发布了我当前的工作解决方案 over there .

最佳答案

genericType 是 ParameterizedTypeImpl 的实例

toString() 方法返回 ownerType 类的名称,然后是 rawType 类名。

反编译后的代码

public String toString() {
    StringBuilder var1 = new StringBuilder();
    if(this.ownerType != null) {
        if(this.ownerType instanceof Class) {
            var1.append(((Class)this.ownerType).getName()); //<---
        } else {
            var1.append(this.ownerType.toString());
        }

        var1.append(".");
        if(this.ownerType instanceof ParameterizedTypeImpl) {
            var1.append(this.rawType.getName().replace(((ParameterizedTypeImpl)this.ownerType).rawType.getName() + "$", ""));
        } else {
            var1.append(this.rawType.getName()); //<------------
        }

关于java - 为什么外部类在泛型类型名称中出现两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45083186/

相关文章:

java - 使用用户输入的数字重复 for 循环

Java - 将变量列表转换为变量名到变量值的映射

c# - CodeDom 和集合初始值设定项

java - JTable中如何改变行的颜色

java - 查找 Struts 版本?

c# - 如何获得所有可能的重载方法的签名?

c# - 访问从 ASPX/ASCX 文件生成的源代码

ruby - 如何在没有 Web 服务器的情况下从命令行执行 ruby​​ 模板文件 (ERB)?

java - 无法解析 grails 2.3.7 中的 :spring-securty-core:2. 0-RC2

C# : propertyinfo always empty