Những phát biểu này không giống nhau. Phương thức truyền là lời gọi phương thức bình thường (invokevirtual
hướng dẫn JVM) trong khi phương thức khác là cấu trúc ngôn ngữ (hướng dẫn checkcast
). Trong trường hợp bạn hiển thị ở trên, bạn nên sử dụng biểu mẫu thứ hai: (TrTuDocPackTypeDto) packDto
Phương pháp cast
được sử dụng trong lập trình phản chiếu với generics, khi bạn có thể hiện Lớp cho một số loại biến. Bạn có thể sử dụng nó như thế này:
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;
}
này cung cấp cho bạn một cách an toàn để tránh sự thay thế không đúng cách đơn giản đúc một loại nguyên liệu để một kiểu generic:
/* DO NOT DO THIS! */
List raw = new ArrayList();
...
return (List<Widget>) raw;
Trình biên dịch sẽ cảnh báo bạn, Unchecked cast from List to List<Widget>
, có nghĩa là trong dấu ba chấm, ai đó có thể đã thêm một Gadget
vào danh sách thô, điều này cuối cùng sẽ gây ra một ClassCastException
khi người gọi lặp lại trong danh sách được trả về (ví dụ) Widget
trường hợp.
cũng xem http://stackoverflow.com/questions/7900410/why-would-i-use-java-lang-class-cast/7902048#7902048 – irreputable