这些陈述是不同的。强制转换方法是常规方法调用(
invokevirtualJVM指令),而另一种是语言构造(
checkcast指令)。在上面显示的情况下,应使用第二种形式:
(TrTuDocPackTypeDto)packDto
cast当您具有某个变量类型的Class实例时,该方法将用于泛型的反射编程中。您可以这样使用它:
public <T> Set<T> find(Class<T> clz, Filter criteria) { List<?> raw = session.find(clz, criteria); Set<T> safe = new HashSet<T>(); for (Object o : raw) safe.add(clz.cast(o)); return safe;}这为您提供了一种避免将原始类型强制转换为泛型类型的错误选择的安全方法:
List raw = new ArrayList();...return (List<Widget>) raw;
编译器将警告您,
Unchecked cast from List toList<Widget>这意味着在省略号中,可能有人将a添加
Gadget到了原始列表,
ClassCastException当调用者遍历返回的(假定)
Widget实例列表时,最终将导致a
。



