Datentypen Unnötiges Casten in Templatecode?

Baldur

Aktives Mitglied
Ich muss gestehen, mit den Templates von Java bin ich noch nicht komplett durchgestiegen. Hier mal ein aktuelles Beispiel, wo mir nicht ganz klar ist, was der Fehler ist:
Java:
public static <T> ClassPropertiesContainer<? extends T> create(@NotNull T object) {
   Class<? extends T> clazz = /*(Class<? extends T>)*/ object.getClass();
   // ....
}

Ich hab den Ausschnitt mal aufs Wesentliche reduziert, ich hoffe es ist noch verständlich genug. Im Prinzip soll mir die create-Funktion mittels Reflection Properties aus einem Objekt ziehen und sie mir in einer Containerklasse zurückgeben.

Die Fehlermeldung in der Zeile mit getClass lautet:
Error:(37, 84) java: incompatible types: java.lang.Class<capture#1 of ? extends java.lang.Object> cannot be converted to java.lang.Class<? extends T>

Was mir da nicht ganz klar ist: Warum gibt mir ein T.getClass() ein Class<? extends Object> zurück, und kein Class<? extends T>?
Wenn ich für T beispielsweise eine Referenz vom Typ "Number" übergebe, kann das Objekt ja z.B. ein java.lang.Integer sein, aber niemals ein String oder irgendetwas anderes, das von java.lang.Object ableitet. Also müsste meinem Verständnis nach das Ergebnis von getClass immer mindestens ein "Class<T>" sein, und nicht eine Class von jeder beliebigen Klasse.
Oder kann Java aufgrund der Typlöschung einfach nicht mehr ermitteln, was T jetzt genau sein soll?

Die offentsichtliche Lösung wäre natürlich, einfach den Cast auszuführen, den ich in dem Quellcodeausschnitt auskommentiert habe, und die Warnung die ich dadurch bekomme mittels @SupressWarnings("unchecked") ausblenden. Mittlerweile hab ich allerdings schon so viele unchecked-Warnungen unterdrückt, daß ich mich frage ob das wirklich der beste Weg ist.
Vielleicht kennt ja von euch jemand einen besseren Weg? :)
 

Baldur

Aktives Mitglied
Klar, funktioniert in der Zeile auch, wobei ich mir dann das Templating in der Funktion dann auch komplett sparen könnte.
Aber am Ende soll mein ClassPropertiesContainer ja auch den richtigen Template-Typ bekommen. Wenn ich also in der ersten Zeile den Cast weglasse, muss ich spätestens am Ende auf auf ClassPropertiesContainer<T> casten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
F Klassen Casten Allgemeine Java-Themen 2
W Datentypen Datentyp "Number" casten? Allgemeine Java-Themen 5
J byte - hex - byte.. casten Allgemeine Java-Themen 8
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
M Casten von Liste nach Array schlägt fehl?? Allgemeine Java-Themen 3
S Type safety Warnings beim casten von Generics Allgemeine Java-Themen 6
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
J Casten ueber generischen Parameter? Allgemeine Java-Themen 5
Q Typen von Generics & Casten Allgemeine Java-Themen 3
M Andere Möglichkeit zu casten Allgemeine Java-Themen 8
G Objekte automatisch casten Allgemeine Java-Themen 10
M wie casten ? Allgemeine Java-Themen 7
T casten von Objekten aus einer ArrayList Allgemeine Java-Themen 4
F Welcher Datentyp in welchen casten? Allgemeine Java-Themen 11
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
D toArray() bei ArrayList casten Allgemeine Java-Themen 10
N treenode casten? Allgemeine Java-Themen 2
R object zu array casten. Allgemeine Java-Themen 2
S Dynamisches Casten Allgemeine Java-Themen 5
D Object in int casten Allgemeine Java-Themen 7
D Optimierung beim Casten Allgemeine Java-Themen 4
P Dynamisch casten - möglich? wie? Allgemeine Java-Themen 5
S Compliance 5.0 prob: HashMap von obj casten Allgemeine Java-Themen 3
M Typkonvertierung und Casten? Allgemeine Java-Themen 6
M Object in HashMap casten Allgemeine Java-Themen 4
C Reflection und variable casten ! Allgemeine Java-Themen 10
K Klasse dynamisch casten Allgemeine Java-Themen 14
S ClassCastException beim Casten in eine Klasse Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben