Diese Aussagen sind nicht identisch. Die Cast-Methode ist ein normaler Methodenaufruf (invokevirtual
JVM-Anweisung), während die andere ein Sprachkonstrukt (checkcast
-Anweisung) ist. Im Fall, dass Sie oben zeigen, sollten Sie das zweite Formular: (TrTuDocPackTypeDto) packDto
Die cast
Methode wird in der reflektierenden Programmierung mit Generika verwendet, wenn Sie eine Klasseninstanz für einige Variablentypen haben. Man könnte es wie folgt verwenden:
public <T> Set<T> find(Class<T> clz, Filter criteria) {
List<?> raw = session.find(clz, criteria); /* A legacy, un-generic API. */
Set<T> safe = new HashSet<T>();
for (Object o : raw)
safe.add(clz.cast(o));
return safe;
}
Dies gibt Ihnen eine sichere Art und Weise die falsche Alternative einfach Gießen eines rohen Art auf eine generische Art zu vermeiden:
/* DO NOT DO THIS! */
List raw = new ArrayList();
...
return (List<Widget>) raw;
Der Compiler wird Sie warnen, Unchecked cast from List to List<Widget>
Das bedeutet, dass in den Ellipsen eine Person Gadget
zur unformatierten Liste hinzugefügt haben könnte, was schließlich zu einer ClassCastException
führen würde, wenn der Aufrufer über die zurückgegebene Liste von (angenommenen) Widget
Instanzen iteriert.
siehe auch http://stackoverflow.com/questions/7900410/why-would-i-use-javal-lang-class-cast/7902048#7902048 – irreputable