Estas afirmaciones no son idénticas. El método de conversión es una invocación de método normal (instrucción JVM invokevirtual
) mientras que el otro es una construcción de lenguaje (instrucción checkcast
). En el caso que muestra arriba, debe usar el segundo formulario: (TrTuDocPackTypeDto) packDto
El método cast
se utiliza en la programación reflexiva con genéricos, cuando tiene una instancia de clase para algún tipo de variable. Se podía utilizar de esta manera:
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;
}
Esto le da una forma segura de evitar la alternativa incorrecta de simplemente echando un tipo de prima a un tipo genérico:
/* DO NOT DO THIS! */
List raw = new ArrayList();
...
return (List<Widget>) raw;
el compilador advertirá, Unchecked cast from List to List<Widget>
, lo que significa que en la elipsis, alguien podría haber agregado un Gadget
a la lista sin procesar, lo que eventualmente causará un ClassCastException
cuando la persona que llama itera sobre la lista devuelta de (supuesto) Widget
instancias.
vea también http://stackoverflow.com/questions/7900410/why-would-i-use-java-lang-class-cast/7902048#7902048 – irreputable