問:爲什麼包含類的名稱會出現兩次?爲什麼外部類在泛型類型名稱中出現兩次?
語境:我生成代碼和目標是讓現場的聲明,如寫入源(完全合格是好的,但我需要的類型參數):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
UPDATE: 謝謝大家對您的輸入。由於這個問題被標記爲重複,我張貼了我目前的工作解決方案over there。
另見https://bugs.openjdk.java.net/browse/JDK-8054213的。 – Radiodef
@Radiodef好,這個問題似乎與我的問題相同。所以這是一個錯誤? (轉換爲答案) – Zalumon
它可能應該被認爲是一個錯誤,但是對於類型的'String'表示沒有真正的標準化規範。 ['getTypeName'](http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html#getTypeName--)沒有指定任何特定的要求,也沒有'toString '。這不是API非常發達的部分。 – Radiodef