Q:含まれるクラスの名前が2回表示されるのはなぜですか?外部クラスがジェネリック型の名前に2回表示されるのはなぜですか?
コンテキスト:私は、コードを生成することだし、ソースに書かれたような目標は、フィールドの宣言を取得することです(完全修飾で結構ですが、私は型パラメータを必要とする):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