F: Warum erscheint der Name der enthaltenden Klasse zweimal?Warum erscheint die äußere Klasse zweimal im generischen Typnamen?
Kontext: Ich Generieren von Code und das Ziel ist die Deklaration des Feldes zu erhalten, wie es in der Quelle geschrieben (Fully Qualified ist in Ordnung, aber ich brauche die Typ-Parameter): 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());
}
}
Ausgang:
genericType: test.Foo.test.Foo$Bar<java.lang.String>
type: test.Foo$Bar
UPDATE: Vielen Dank an alle für Ihre Eingabe. Da diese Frage als doppelt markiert wurde, habe ich meine aktuelle Arbeitslösung over there gepostet.
Auch https://bugs.openjdk.java.net/browse/JDK-8054213 sehen. – Radiodef
@Radiodef guten Fang, dieses Problem scheint mit meiner Frage identisch zu sein. Also ist es ein Fehler? (konvertieren zu antworten) – Zalumon
Es sollte wahrscheinlich als ein Fehler betrachtet werden, aber es gibt nicht wirklich eine standardisierte Spezifikation für 'String' Repräsentationen von Typen. ['getTypeName'] (http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Type.html#getTypeName--) spezifiziert keine besonderen Anforderungen und auch keine toString '. Es ist kein sehr gut entwickelter Teil der API. – Radiodef