【发布时间】:2017-07-13 14:11:27
【问题描述】:
问:为什么包含类的名字出现两次?
上下文:我正在生成代码,目标是获取字段的声明,如源代码中所写(完全限定是可以的,但我需要类型参数):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。
【问题讨论】:
-
@Radiodef 很好,这个问题似乎与我的问题相同。所以这是一个错误? (转换为答案)
-
它可能应该被认为是一个错误,但对于
String类型的表示并没有真正的标准化规范。getTypeName没有指定任何特定要求,toString也没有。它不是 API 中一个非常完善的部分。
标签: java reflection code-generation